簡體   English   中英

EF6代碼優先:插入繼承的實體失敗

[英]EF6 Code First: Inserting an inherited entity fails

我有一個名為Client的實體,無法插入。 ClientPerson繼承人從Party繼承。

這是我的模型類:

 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; }



    }

這是單元測試,它在assert語句上失敗(數據庫中的手動檢查確認了單元測試的結果):

        [TestMethod]
        public void AddClient()
        {
            JCGunsDbContext db = new JCGunsDbContext();
            int initCount = db.Clients.Count();

            string guid = Guid.NewGuid().ToString();

            Client cl1 = new Client();
            cl1.NickName = guid;
            cl1.Surname = guid;
            cl1.CellNumber = "0123456789";
            cl1.EmailAddress = "test" + guid + "@test.com";
            db.UserId = "SYSTEM_UNITTESTING";
            db.Clients.Add(cl1);
            db.SaveChanges();

            Assert.IsTrue(db.Clients.Count() > initCount);
        }

為什么此插件不起作用?如何解決?

如果此客戶端連接到現有的Person,則需要將客戶端的ID傳遞給客戶端。 否則,您需要在client.Person導航屬性中添加Person對象。

例如

如果您將此客戶端連接到現有的Person。

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

如果您要使用新的Person添加新的客戶端。

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

問題是Client的構造函數中的以下語句:

Reseller = new Reseller();

經銷商應該是可選的。 設置一個新的Reseller實例,該實例不遵循自己的帶注釋的驗證標准,這會使SaveChanges方法失敗而沒有引發異常。 刪除該語句可解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM