EF6 Code First:插入继承的实体失败

时间:2014-03-16 08:24:07

标签: c# entity-framework inheritance

我有一个名为Client的实体无法插入。 Client继承自Person的{​​{1}}继承。

这是我的模型类:

Party

这是单元测试,它在assert语句上失败(数据库中的手动检查确认了单元测试结果):

 public class Client : Person
    {
        public Client()
        {
            CrimeIncidents = new List<CrimeIncident>();               
            Reseller = new Reseller();
        }

        public virtual ICollection<CrimeIncident> CrimeIncidents
        {
            get;
            set;
        } 

        public virtual Reseller Reseller { get; set; }

    }

public class Person : Party
    {
        [CustomValidation(typeof(PartyRoleCustomValidation), "ValidateRSAIDNumber")]
        public string IDSocialSecurityPassNum { get; set; }

        [DisplayName("Name")]
        public string NickName { get; set; }

        [DisplayName("Full names")]
        public string FullNames { get; set; }

        public string Surname { get; set; }

        public Gender? Gender { get; set; }

        [DisplayName("Date of birth")]
        [DataType(DataType.Date)]
        public string DOB { get; set; }

    }

public class Party
    {

        public Int64 Id { get; set; }

        public virtual PartyRole PartyRole
        {
            get;
            set;
        }

        //public List<Address> Adresses { get; set; }
        public virtual string PostalAddress { get; set; }

        [DataType(DataType.PostalCode)]
        public virtual string PostalCode { get; set; }

        public virtual string PhysicalAddress { get; set; }

        [DataType(DataType.PostalCode)]
        public virtual string StreetCode { get; set; }

        //public List<EmailAddress> EmailAdresses { get; set; }
        [DataType(DataType.EmailAddress)]
        public virtual string EmailAddress { get; set; }


        //public List<ContactNumber> ContactNumbers { get; set; }
        [DataType(DataType.PhoneNumber)]
        public virtual string CellNumber { get; set; }

        [DataType(DataType.PhoneNumber)]
        public virtual string PhoneNumber { get; set; }

        [DataType(DataType.PhoneNumber)]
        public virtual string FaxNumber { get; set; }



    }

为什么这个插件无法正常工作?如何解决?

2 个答案:

答案 0 :(得分:0)

如果此客户端连接到现有Person,则需要将Id传递给客户端。  否则,您需要在client.Person导航属性中添加Person对象。

e.g。

您将此客户端与现有人员连接起来。

Client client = new Client();
client.Id = oldPerson.Id

如果您正在为新客户添加新客户。

Client client = new Client();
client.Person = new Person(){......}

答案 1 :(得分:0)

问题是Client的构造函数中的以下语句:

Reseller = new Reseller();

经销商应该是可选的。设置不符合其自己的注释验证标准的新Reseller实例会导致SaveChanges方法失败而不会引发异常。删除语句修复了问题。