如何将 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; }
}
我建议使用称为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