2

私の現在のセットアップ:
いくつかのプロパティを持つエンティティ オブジェクトがありますint Id。データベースと通信するために、特に次の方法でリポジトリを作成しました。

public int Add(TEntity entity)
{
    ObjectSet.AddObject(entity);
    return entity.Id;
}

(これは汎用リポジトリであり、 が必要でTEntityあり、プロパティとの単なるインターフェースである をclass実装する必要があります。)IEntityint Id

私の問題:
リポジトリに追加するための新しいエンティティを作成する場合、ID を指定する必要があります。ただし、EF は既に値を持っているため、ID を自動的に生成することはできません。

考えられる解決策:
この 2 つの可能性しか考えられませんでした。

  1. プロパティIdを null 可能 にする
  2. 代わりに をリポジトリに渡し、EntryInputModelそこでマッピングを行います。
    現在EntryInputModel、私は Controller にバインドし、 AutoMapperEntryを使用してにマッピングしています。これを変更する必要がある場合は、プロジェクト内の依存関係も再考する必要があります。現在、クラスとクラスは Web アプリケーションでしか使用できないためです。...InputModel...ViewModel

どちらが好ましいですか?これに対抗する方法は他にありますか?

4

2 に答える 2

1

SQL Serverをバックエンドとして使用している場合、推奨される解決策は、ID列をデータベースのINT IDENTITYにし、エンティティオブジェクトのnull不可能な列にすることです。

新しいエンティティを追加するときは、IDに-1などの任意の値を割り当てるか、値をまったく割り当てないでください。新しいエンティティを挿入すると、SQL Serverによって実際のIDが自動的に生成されます(

EntityContext.AddToEntities(newEntity);
EntityContext.SaveChanges();

自動的にEFに通知されるので、挿入するとすぐに使用できます。

int newEntityID = newEntity.ID;

魅力のように機能します-少なくとも私のテストアプリでは:-)

于 2010-04-05T15:06:28.607 に答える
0

データストア/EFによって生成されない一意のIDを生成して、オブジェクトをEFに渡す前にそれらを定義できるようにすることができます...(Guidを考えてください)

于 2010-04-05T15:02:30.610 に答える