0

私は単純な関係を持っています:

関連する「Company」オブジェクトを持つ「Note」オブジェクトがあります。「メモ」を作成するときは、既存の「会社」を選択し、その他の必要なフィールドを入力します。

私の問題は、保存するたびに「Company」オブジェクトの新しいバージョンが挿入され、その理由がわかりません。

ここで受け入れられた回答のすべてのオプションを試しました既存のオブジェクトに新しいオブジェクトを挿入しますが、何も機能しません。

現在、私は次のことを行っています。

var company = db.Company.FirstOrDefault(i => i.ID == note.Company.ID);
note.Company = company;

db.Notes.AddObject(note);
db.ObjectStateManager.ChangeObjectState(company, EntityState.Unchanged);
db.ObjectStateManager.ChangeObjectState(note, EntityState.Added);

db.SaveChanges();

ただし、新しい「会社」オブジェクトを追加し続けます。奇妙なのは、すべてのフィールドを追加するのではなく、CompanyName" フィールドだけを追加する (そして新しい Id を作成する) ことです。

4

5 に答える 5

0

これが私がそれをする方法です、それが役立つことを願っています。

using (DataContext dtx = new DataContext()) {

            Note note = new Note();

            dtx.Notes.Add(note);

            Company company = dtx.Companies.FirstOrDefault((System.Object obj) => obj.ServerId == 1);

            note.Server = company;

            dtx.SaveChanges();

        }
于 2012-07-24T11:56:12.583 に答える
0

FirstorDefault メソッドで note.Company.Id を使用する場合、問題は最初の行にあると思います。あなたがエントリー方法を投稿できれば、私はさらに助けることができるかもしれません. メソッドに入るパラメーターとして companyId がある場合、上記のコードを次のように作り直すことができます。

Company company = db.Company.Find(companyId);
note.Company = company;
db.SaveChanges();

または、他の答えが示唆しているように、note.CompanyIdを設定するだけです

于 2012-07-24T11:50:22.430 に答える
0

問題は、新しいインスタンスを作成しNoteてプロパティを設定してCompanyいるため、EF が会社のレコードを再作成していると思われることです。Note既存のオブジェクトにリンクしようとしている場合はCompany、メモに会社の外部キーを設定するだけです。

var company = db.Company.FirstOrDefault(i => i.ID == note.Company.ID);    
note.CompanyID = company.ID; // will link the note to the specified company
db.Notes.AddObject(note);
db.SaveChanges();

また、会社を引き下げるために使用していることも意味がありませんnote.Company.ID。このプロパティはnull、新しいNote.

于 2012-07-24T11:50:53.860 に答える
0

これが既存の会社である場合は、エンティティではなく CompantID フィールドを設定します

note.CompanyID = company.ID;
于 2012-07-24T11:49:37.073 に答える
0

すべての回答に感謝します。

結局、私の問題は、まず、ページのモデルを作成するときに、最初の新しい「会社」をインスタンス化したため、作成のために会社をnullに設定しました。

次に、ページで、新しい Company オブジェクトがコントローラーに戻されます。

会社 ID を設定する前にこれを null に設定しようとしましたが、うまくいきませんでした。ただし、上記の textboxfor bit を削除すると、すべてが機能し始めました!

于 2012-07-24T12:18:52.750 に答える