Предположим, что у меня есть следующая модельNhibernate Удалить коллекцию детской без свойства в родительском объекте
public class Customer
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
public class ActivityLog
{
public virtual Guid Id { get; set; }
public virtual Guid CustomerId { get; set; }
public virtual Customer Customer { get; set; }
public virtual DateTime ActivityDate { get; set; }
}
Я хотел бы быть в состоянии удалить клиента и все соответствующие ActivityLog элементы, позвонив по телефону
session.Delete(customer);
То, что я не хочу, это иметь свойство List<ActivityLog> Logs
в моем классе Customer. Можно ли достичь в Нюбернате? Я пробовал EF, и он работает там, но в HN получает исключение ссылочного ограничения.
Мои отображения:
public class CustomerMap : ClassMapping<Customer>
{
public CustomerMap()
{
Id(x => x.Id, map => map.Generator(Generators.GuidComb));
Property(x => x.Name);
}
}
public class ActivityLogMap : ClassMapping<ActivityLog>
{
public ActivityLogMap()
{
Id(x => x.Id, map => map.Generator(Generators.GuidComb));
Property(x => x.ActivityDate);
ManyToOne(x => x.Customer, mapping =>
{
mapping.Class(typeof(Customer));
mapping.Column("CustomerId");
});
}
}
Может быть возможно, чтобы иметь некоторый внутренний крюк и инспектировать отображение и сделать это вручную для NHibernate?
Edit: Вот как она работает с EF
public class CustomerEFMap : EntityTypeConfiguration<Customer>
{
public CustomerEFMap()
{
ToTable("Customer");
HasKey(x => x.Id);
Property(x => x.Name);
}
}
public class ActivityLogEFMap : EntityTypeConfiguration<ActivityLog>
{
public ActivityLogEFMap()
{
ToTable("ActivityLog");
HasKey(x => x.Id);
HasRequired(x => x.Customer).WithMany().HasForeignKey(x => x.CustomerId);
}
}
using (var context = new ObjectContext())
{
var customer = context.Set<Customer>().Find(id);
context.Set<Customer>().Remove(customer);
context.SaveChanges();
}
Имея клиентов и соответствующей ActivityLog в БД, удаляет как
Как это работает в EF? – ngm
Добавлено редактирование, как это работает для меня в EF –