我正在尝试在“ApplicationUser”类和最近创建的名为“Issue”的类之间创建“一对多”关系。
所以,在 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 表 是用这些字段创建的:
- 身份证
- ApplicationUser_Id
- express 编号
- 客户编号
我的问题是为什么要创建“ApplicationUser_Id”字段,我该如何阻止它?
最佳答案
问题是 EF 认为您实际上想要 Issue 和 ApplicationUser 之间的三个一对多关系:
- 一个代表
ICollection<Issue> Issues
在ApplicationUser
(ApplicationUser_Id) - 一个代表
ApplicationUser Courier
在Issue
(CourierId) - 一个代表
ApplicationUser Customer
在Issue
(客户编号)
(请注意,EF 允许从任一侧定义关系。)
如果你想要ApplicationUser.Issues
包含此用户的所有问题,无论他是 express 员还是客户,您都需要额外的 ApplicationUser_Id key 。配置 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/