とにかく、質問のタイトルがわからない!仮想プロパティとして持つモデル クラスRandomStuff
があります。Environment
public class RandomStuff
{
//NOT SHOWN ON FORM HIDDEN JUST TO MAKE IT EASIER IN DB
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Newtonsoft.Json.JsonProperty]
public int JobId { get; set; }
[Required]
[ForeignKey("Environment")]
[Newtonsoft.Json.JsonProperty]
[DataMember(IsRequired = true)]
public int EnvironmentId { get; set; }
[Newtonsoft.Json.JsonProperty ]
public virtual Environment Environment { get; set; }
}
私の環境は以下の通りです: -
[Newtonsoft.Json.JsonObject(Newtonsoft.Json.MemberSerialization.OptIn)]
[DataContract]
public class Environment
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Newtonsoft.Json.JsonProperty]
public int Id { get; set; }
[Required]
[Newtonsoft.Json.JsonProperty]
[DataMember(IsRequired = true)]
public string Name { get; set; }
}
今、私のコントローラには次のものがあります:-
public HttpResponseMessage Save(RandomStuff stuff)
{
if (ModelState.IsValid)
{
//Some stuff here
db.RandomStuffs.Add(stuff);//When this excutes, it is
//inserting data in Environment table also.
db.SaveChanges();
}
}
さて、RandomStuff
テーブルに何かを追加するたびに、環境も追加されます。
編集:
ef-inserting-duplicate-parent-objectsから取った一般的な例で説明しようと思います
public class Foo
{
public int FooId {get;set;}
public virtual ICollection<Bar> Bars {get;set;}
}
public class Bar
{
public int BarId {get;set;}
public strung BarName {get;set;}
}
さて、上記が私のモデル構造である場合。DB に 1 つの Foo データを追加しようとしています。
db.Foo.Add(new Foo{
FooId=1,
Bars=new List<Bar>(){
new Bar{
BarId=2,
BarName="Something"
}
}
})//Something of this sort will be my data, which needs to be inserted
//Now this record "new Bar{BarId=2, BarName="Something"}" is already present in DB
ここで、id=1 の Foo テーブルにデータを挿入し、id 2 の Bars テーブルに複製を追加しています。
また、以下のようなものを使用すると、要件が満たされます。
db.Entry(fooModelDataComingFromSomewhere.Bars).State = EntityState.Unchanged;