10

ここで規定されている方法に従って、最初にEFコードを使用して1対1の関係を設定しました。

EntityFrameworkにおける一方向の1対1の関係

私のマッピングは次のようになります...

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Asset>()
        .HasRequired(i => i.NewsItem)
        .WithOptional(e => e.Asset)
        .Map(m => m.MapKey("NewsItemId"));
}

しかし、私がこの例外を受け取ったとき...

'Asset_NewsItem'AssociationSetからの関係は'Deleted'状態にあります。多重度の制約がある場合、対応する「Asset_NewsItem_Source」も「Deleted」状態である必要があります。

このコードが実行されるときはいつでも:

var entry = _db.NewsItems.Find(id);

entry.Asset = new Asset();

_db.DbContext.SaveChanges();

NewsItemに関連付けられている以前のアセットに削除のマークを明示的に付けると、機能するようになりますが、ちょっと奇妙に思えます。マッピングに基づくと、上記のコードは単純に機能するはずです...古いアセットを新しいアセットに置き換えます。

私は何か間違ったことをしていますか?正しく機能させるために、マッピングで指定する必要があるものはありますか?または、このような関連オブジェクトを削除してから追加する必要があるのは、単にEFの方法ですか?

4

1 に答える 1

8

それがEFの仕組みです。関連するアセットを含むエントリをロードしました。次に、新しいアセットを割り当てます。この操作により、古いアセットはどのエントリとも無関係になりますが、マッピングでは許可されません(Asset関連している必要があると指定しましたEntry)。したがって、マッピングの制約を満たすために、新しいアセットを割り当てる前に、古いアセットを削除するか、別のエントリに割り当てる必要があります。

于 2012-07-17T09:29:18.427 に答える