出于这个问题的目的,我有3个实体:账户,人和事件。
帐户包含与"登录"相关的内容。信息。
人员包含姓名,DOB等信息。
事件是人们可以参加的不同事件。
帐户和人之间存在1-1关系。 Person主键引用Account主键,因此必须与帐户连接。
帐户和活动之间存在多种关系。帐户可以创建许多事件,但每个事件可能只有1个创建者。
人与事之间有很多关系。很多人可能参加很多活动。
public class Account
{
public int AccountId { get; set; }
public virtual Person Person { get; set; }
public virtual ICollection<Event> CreatedEvents { get; set; }
}
public class Person
{
public int PersonId { get; set; }
public virtual Account Account { get; set; }
public virtual ICollection<Event> ParticipatingIn { get; set; }
}
public class Event
{
public int EventId { get; set; }
public int CreatorId { get; set; }
public virtual Account Creator { get; set; }
public virtual ICollection<Person> Participants { get; set; }
}
帐户/人员关系配置如下:
public AccountEntityConfiguration()
{
this.HasRequired(a => a.Person)
.WithRequiredPrincipal(p => p.Account)
.WillCascadeOnDelete(true);
this.HasMany(a => a.CreatedEvents)
.WithRequired()
.HasForeignKey(e => e.CreatorId)
.WillCascadeOnDelete(true);
}
public PersonEntityConfiguration()
{
this.HasMany(p => p.ParticipatingIn)
.WithMany();
}
我的问题是:
删除帐户后,将删除关联的人员。因此,必须删除PersonsEvents表中的相关行。
删除事件时,必须删除引用PersonEvents链接表中事件的行。
如果某个帐户是某个活动的创建者,则无法阻止与该帐户关联的人员也参与该活动。如果该帐户随后被删除,则删除级联到由帐户创建的事件,该事件级联到PersonsEvents表。同时,关联的Person被删除,它会级联到PersonsEvents表,现在发生了冲突。
在我的代码中,当我尝试将一个人分配给事件时,很容易检查我的PersonId与我的CreatorId是否相同,但是如何确保在我的数据库中进行相同的检查?由于冲突,我不能在PersonsEvents表中的Person和Event外键上启用级联删除,这是我需要的。