在此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/

10-12 01:08