如何将 Icollectable 种子种子到数据库代码中 首先

本文关键字:种子 代码 首先 数据库 Icollectable | 更新日期: 2023-09-27 18:36:55

我需要使用一对多关系(一个联系人可以有多个地址)为我的数据播种,但它不允许我播种我指定为 ICollection 的地址。我不能将其存储为字符串或整数,那我该怎么办?

 namespace SuccessEd.Data.Model
{
    public class Contact
    {
        public int ContactId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public virtual ICollection<Address> Addresses { get; set; }
    }
}


 namespace SuccessEd.Data.Model
{
    public class Address
    {
        public int AddressId { get; set; }
        public string HomeAddress { get; set; }
        public string BusinessAddress { get; set; }
        public string PoBox { get; set; }
        public int ContactId { get; set; }
        public virtual Contact Contact { get; set; }
    }

如何将 Icollectable 种子种子到数据库代码中 首先

我建议使用称为Fluent API的东西。您可以在此处阅读有关 Fluent api 的更多信息

为了使事情变得更容易,您可以查看此方法: 我对你的课程做了一些更改

namespace SuccessEd.Data.Model
{
    public class Contact
    {        
        public Contact () 
        {
            AddressList = new List<Address>();
        }
        public int ContactId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public virtual ICollection<Address> Addresses { get; set; }
   }
}

和另一个

namespace SuccessEd.Data.Model
{
    public class Address
    {
        public Adress() {}
        public int AddressId { get; set; }
        public string HomeAddress { get; set; }
        public string BusinessAddress { get; set; }
        public string PoBox { get; set; }
        public virtual Contact Contact { get; set; }
    }
}

请记住,您的课程必须是公开的。 他们两个!!

在您的 OnModelCrating 上。有了这个,您必须向用户提供一个地址

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Contact>().HasRequired<Address>(s => s.AddressId).WithMany(s => s.AddressList).HasForeignKey(s => s.ContactId);
}

我希望这能帮助您解决问题。

干杯

我认为你走在正确的轨道上。虽然我认为地址不需要是虚拟的。如果您正在使用数据库,最好添加一个名为联系人 ID 的属性,并将其提供给联系人和地址。

您走在正确的轨道上<>,除了您需要使用 ICollection 而不是 List<> 作为联系人类中的地址。喜欢这个:

public virtual ICollection<Address> Addresses { get; set; }

检查一下原因:为什么在多对多/一对多关系上使用 ICollection 而不是 IEnumerable 或 List

MSDN上的更多解释:http://msdn.microsoft.com/en-us/data/jj591620.aspx#UniDirectional