0

複数の顧客タイプを持つことができるオブジェクトCustomerがあり、各顧客タイプは複数の顧客を持つことができます。私はEFを初めて使用しますが、顧客を追加することができましたが、顧客の顧客タイプを追加するための構文も正しく理解できないようです。

私の顧客クラス(簡略化):

public partial class Customer
{
        public virtual int Id { get; set;}
        public virtual string Name { get; set;}

    #region Navigation Properties

        public virtual ICollection<CustomerType> CustomerTypes
        { get; set; }

    #endregion
}

顧客タイプ:

public partial class CustomerType
{

        public virtual int Id
        {
            get;
            set;
        }

        public virtual string Name
        {
            get;
            set;
        }

        #region Navigation Properties

        public virtual ICollection<Customer> Customers
        { get; set; }

        #endregion
}

このプロジェクトを実行すると、CustomerTypeCustomerテーブルがCustomer_Id列とCustomerType_Id列で作成されるため、これで問題ありません。

次に、次のように顧客を作成します。

// code behind
var customer = new Customer();
customer.name = txtCustomerName.Text;

using (var context = new MyEntities())
{   
    context.Customers.Add(customer);
    context.SaveChanges();  
}

私はここを見て、多対多のエンティティフレームワークを挿入/更新しました。どうすればいいのですか?顧客タイプと同様のことをしようとしました:

var customer = new Customer();
customer.name = txtCustomerName.Text;

// only starting with one customer type selected in a check box list
CustomerType customerType = context.CustomerTypes.FirstOrDefault(i => i.Id == 1);

using (var context = new MyEntities())
{
    // IncidentTypes throws Object reference not set to an instance of an object
    customer.CustomerTypes.add(customerType);

    context.Customers.Add(customer);
    context.SaveChanges();  
}

ここで明らかな何かが欠けていますか?

前もって感謝します。

編集:何らかの理由で、私は.Add(AddToObject、AttachToなどはありません。

4

2 に答える 2

0

CustomersTypes最初にコレクションを初期化する必要があります。

customer.CustomerTypes = new List<CustomerType>();

この初期化をCustomerのコンストラクターに追加することもできます。

于 2012-07-02T08:00:49.207 に答える
0

これはそれを行う1つの方法です:

var customer = new Customer();
customer.name = txtCustomerName.Text;

// only starting with one customer type selected in a check box list
//add Include there
CustomerType customerType = context.CustomerTypes.Include("Customers").FirstOrDefault(i => i.Id == 1);

using (var context = new MyEntities())
{
    // IncidentTypes throws Object reference not set to an instance of an object
    //customer.CustomerTypes.add(customerType);

    //context.Customers.Add(customer);
    customerType.Customers.Add(customer);
    context.SaveChanges();  
}
于 2012-07-02T08:07:58.673 に答える