自动生成的EF代码优先约束多对多关系

时间:2017-03-22 14:04:31

标签: c# mysql entity-framework ef-code-first

出于这个问题的目的,我有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外键上启用级联删除,这是我需要的。

0 个答案:

没有答案