0

1 対多の関係を使用してデータをシードする必要があります (連絡先は複数のアドレスを持つことができます)。しかし、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; }

    }
4

3 に答える 3

2

あなたは正しい軌道に乗っていると思います。アドレスが仮想である必要はないと思いますが。データベースを使用している場合は、contact id というプロパティを追加して、contact と address に渡すとよいでしょう。

于 2013-10-26T17:13:40.863 に答える
2

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

クラスはpublicでなければならないことを忘れないでください。どちらも!!

OnModelCrating で。これにより、ユーザーにアドレスを提供する必要があります

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<Contact>().HasRequired<Address>(s => s.AddressId).WithMany(s => s.AddressList).HasForeignKey(s => s.ContactId);
}

これが問題の解決に役立つことを願っています。

乾杯

于 2013-10-26T17:25:05.370 に答える
1

Contact クラスのアドレスに List<> の代わりに ICollection<> を使用する必要があることを除いて、正しい軌道に乗っています。このような:

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

理由についてこれを確認してください: 多対多/多対多の関係で IEnumerable または List<T> ではなく ICollection を使用するのはなぜですか?

詳細については、MSDN を参照してください: http://msdn.microsoft.com/en-us/data/jj591620.aspx#UniDirectional

于 2013-10-26T17:20:10.333 に答える