私はEntity Frameworkを初めて使用しています。私たちはまずEF6モデルを使用したアーキテクチャでアプリケーションを追加します。 私はそのようなクラス(私は良く説明するためにコードを単純化しています)があります。私たちはそのような物体領域を初期化するアプリケーションでのビジネス層にEF 6オブジェクトを2回挿入しようとしました
class Country
{
int CountryId (identity column) { get; set; }
string Name { get; set; }
ICollection<Child> Regions { get; set; }
}
class Region
{
int RegionId (identity column) { get; set; }
string Name { get; set; }
int CountryId { get ; set; } //foreign key to Country(CountryId)
}
を:
public Region Create()
{
Provincia Region = new Region();
provincia.Country = CountryDAL.GetByCode("ES");
provincia.CountryId = Region.Country.CountryId ;
return Region ;
}
CountryDALですDBから国を読み込むレイヤーです。 私はsaveChangesをしようとすると、私はDB beacauseからユニークな規制例外を持っています.EFは国を2回挿入しようとします。私は、私は新しいオブジェクトとして国を保存したいいけない、CountryIdが満たされた彼の財産を持つエンティティリージョンを保存したい理由
this.context.Entry(entity).State = Data.Entity.EntityState.Added;
entity.AcceptChanges(user);
int Result = this.context.SaveChanges();
私は理解できません。 しかし、他のビューでは、国を作成し、その国を子として保存することができます(これは私が解決した別の問題です)。
ありがとうたくさん
保存したい場合は、コンテキストに追加する必要がありますか?あなたはそれを(それが添付されている場合)保存することができますまたはそれを追跡していないコンテキストに添付する? – Deniz
ありがとうございました。私はそれを理解していません。あなたはそれを説明できますか? 「this.context.Entry(Entity).State = Data.Entity.EntityState.Added;」という行を参照してください。 – Jsanchez
はい。私はEFの専門家ではありませんが、エンティティを保存したい場合は、エンティティを添付するか(存在しない場合)、または直接SaveChanges()を呼び出す必要があります。 'Add()'はDBのINSERTによく似ています。あなたのDBではeaxistだが、あなたの文脈ではないなら、 'Add()'を呼んでもあなたの文脈に害はないが、既存の項目をデータベースに挿入するのはエラーである。私は 'Add()'と 'Data.Entity.EntityState.Added:'を使っています。 – Deniz