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