我需要使用一对多的关系来播种我的数据(一个联系人可以有很多地址)但它不会让我将我指定的地址作为ICollection。我不能将它存储为字符串或int。那我该怎么办?
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; }
}
答案 0 :(得分:2)
我认为你走在正确的轨道上。尽管如此,我并不认为地址需要是虚拟的。 如果您正在使用数据库,最好添加一个名为contact id的属性并将其与联系人和地址进行联系。
答案 1 :(得分:2)
我建议使用名为Fluent API的东西。 You can read more about Fluent api here
为了让事情变得简单,您可以看一下这种方法:我对您的类进行了一些更改
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; }
}
}
请记住,您的课程必须公开。他们两个!!
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Contact>().HasRequired<Address>(s => s.AddressId).WithMany(s => s.AddressList).HasForeignKey(s => s.ContactId);
}
我希望这可以帮助您解决问题。
干杯
答案 2 :(得分:1)
除非您需要使用ICollection&lt;&gt;,否则您走在正确的轨道上而不是List&lt;&gt;用于Contact类中的地址。像这样:
public virtual ICollection<Address> Addresses { get; set; }
检查这是为什么: Why use ICollection and not IEnumerable or List<T> on many-many/one-many relationships?
在MSDN上有更多解释: http://msdn.microsoft.com/en-us/data/jj591620.aspx#UniDirectional