带有外键列表的附加属性

时间:2019-02-21 20:44:32

标签: c# asp.net-core entity-framework-core

我有两个类,人和事件。多个人可以注册一个事件,并被编码为外键列表。我的问题是添加诸如有偿布尔值之类的其他变量的正确方法是什么?我想我必须在Person和Event上创建一个带有外键链接的单独类,但我想确保没有添加任何额外属性的奇特方法。

3 个答案:

答案 0 :(得分:2)

如果Person有很多事件,那么我将像下面这样构造我的人员类

public class Person
{
    public int Id { get; set; }

    // each person have many events
    public List<EventRelation> Events { get; set; }
}

public class EventRelation
{
    public int Id { get; set; }

    public Events Event { get; set; }

    // Person Id forgen Key
    public int Person_Id { get; set; }

    // Events Id forgen Key
    public int Event_Id { get; set; }
}


public class Events
{
    public int Id { get; set; }

    public string EventType { get; set; }

}

答案 1 :(得分:1)

是的,您的做法正确。由于是N to N关系,因此需要您指定的连接实体。加入实体将具有两个主(外键)属性,包括PersonId和EventId以及其他可选属性(在您的情况下为Paid)。

更新:

关于寻找一种理想的方法,答案是否定的。在设计数据库时,您限于所使用的数据模型,这里是关系数据模型。 EF和其他类型的ORM只是用于在应用程序和数据库之间进行通信的工具。
但是,如果您在Person类中定义了一个Collection<Event>类型的外键,而在Event类中定义了Collection<Person>类型的另一个外键,则实体框架将自动使用两个外键创建联接表。但这不是您想要的,因为您需要向联接表中添加更多属性。

答案 2 :(得分:0)

您始终可以将新属性添加到类中,执行迁移脚本,然后更新数据库脚本以使实体与数据库同步。

class Person
{
   public int Id {get; set;}
}

假设您添加DateOfBirth

class Person
{
   public int Id {get; set;}
   public DateTime DateOfBirth {get; set;}
}

然后

dotnet add migration 'BirthDate'
dotnet ef database update