我正在尝试在类“ ApplicationUser”和最近创建的一个名为“问题”的类之间创建“一对多”关系。
因此,在Models / IdentityModels.cs / ApplicationUser中,我添加了以下属性:
public ICollection<Issue> Issues { get; set; }
而Issue.cs具有以下代码:
namespace Test.Models
{
public class Issue
{
public int Id { get; set; }
public ApplicationUser Courier { get; set; }
public ApplicationUser Customer { get; set; }
}
}
我正在使用自动迁移。因此,在构建并运行“ update-database”之后,使用以下字段创建了Issues表:
ID
ApplicationUser_Id
CourierId
客户ID
我的问题是为什么创建了“ ApplicationUser_Id”字段,我该如何防止呢?
最佳答案
问题在于,EF认为您实际上需要在Issue和ApplicationUser之间建立三个一对多的关系:
一个用于ICollection<Issue> Issues
上的ApplicationUser
(ApplicationUser_Id)
一个用于ApplicationUser Courier
上的Issue
(CourierId)
一个用于ApplicationUser Customer
上的Issue
(CustomerId)
(请注意,EF允许从双方定义关系。)
如果希望ApplicationUser.Issues
包含此用户的所有问题,无论他是快递员还是客户,都将需要其他ApplicationUser_Id密钥。配置EF使其工作相当麻烦。
也许会有一个更简单的解决方案:在ApplicationUser
上引入两个集合。
public ICollection<Issue> CourierIssues { get; set; }
public ICollection<Issue> CustomerIssues { get; set; }
然后使用流畅的API在ModelBuilder中配置反向链接,以消除ApplicationUser_Id键:
modelBuilder.Entity<ApplicationUser>().HasMany(au => au.CourierIssues).WithOptional(i => i.Courier);
modelBuilder.Entity<ApplicationUser>().HasMany(au => au.CustomerIssues).WithOptional(i => i.Customer);
关于c# - ASP.NET MVC5-更新数据库后创建了不需要的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39961494/