在此ASP.NET MVC应用程序中,所有数据库信息都在应用程序中设置为“代码优先”。
有一个名为“客户”的Model类,该类已经迁移到数据库,并填充了五个“客户”
现在,我想添加一个名为MembershipType的“导航类”。每个客户将拥有四种不同的“会员类型”之一
看起来像这样
namespace WebApplication3.Models
{
public class MembershipType
{
public byte Id { get; set; }
public string Name { get; set; }
public byte DurationInMonths { get; set; }
public short Fee { get; set; }
public byte Discount { get; set; }
}
}
然后,像这样,将MembershipType和MembershipTypeId字段添加到现有的Customer类中,并尝试添加迁移和更新数据库。
namespace WebApplication3.Models
{
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime? Birthday { get; set; }
//These two fields were added as a 'Navigation Class'
public MembershipType MembershipType { get; set; }
public byte MembershipTypeId { get; set; }
}
}
在包管理器中更新数据库时出现错误
ALTER TABLE语句与FOREIGN KEY约束“ FK_dbo.Customers_dbo.MembershipTypes_MembershipTypeId”冲突。数据库“ aspnet-WebApplication3-20160817102050”的表“ dbo.MembershipTypes”的“ Id”列中发生了冲突。
我查看了我最近制作的其他程序,并且在数据库中未填充导航类之前还没有遇到“外键”问题。
我试图理解为什么外键会发生此错误...
最佳答案
为了使该EF约定生效,您的MembershipType
类应具有一组Customer:
public class MembershipType
{
public byte Id { get; set; }
public string Name { get; set; }
public byte DurationInMonths { get; set; }
public short Fee { get; set; }
public byte Discount { get; set; }
public virtual ICollection<Customer> Customers {get; set;}//this needs to be present
//otherwise EF is not able to know what type of relationship to create
}
关于c# - 在实体中正确创建导航类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39002888/