如何将Icollectable加入数据库代码中

时间:2013-10-26 16:44:00

标签: c# asp.net-mvc entity-framework

我需要使用一对多的关系来播种我的数据(一个联系人可以有很多地址)但它不会让我将我指定的地址作为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; }

    }

3 个答案:

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

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

on OnModelCrating。有了这个,你必须给用户一个地址

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