2

ASP.NET WebAPI プロジェクトで Breeze を使用しています。breezecontroller を追加しました。

    [BreezeController]    
    public class BreezeController : ApiController
    {
        readonly EFContextProvider<MyEntities> _context 
            = new EFContextProvider<MyEntities>();

        [HttpGet]
        public string Metadata()
        {
           return _context.Metadata();
        }

残念ながら、createEntity を呼び出すと 、最初にキーを設定するか、entityType 'AutoGeneratedKeyType' プロパティを 'None' 以外に設定しないと、オブジェクトを EntityManager にアタッチできませんというエラーが表示されます。

メタデータ API が呼び出されたときにエンティティが自動初期化されていませんか?

ティア

4

2 に答える 2

7

あなたが作成しようとしているエンティティは、サーバーではなくクライアントが一意のキーの設定を担当するように定義されているに違いありません。EF Code First は Guid キー プロパティがクライアントによって既定で決定されると想定しているため、キー プロパティは Guid であると確信しています。

その場合、新しいエンティティをマネージャーに追加する前に、エンティティを作成するときにキーを設定する必要があります。

メソッドを使用して新しいエンティティを作成することを選択しましたEntityManager.createEntity。それも私のお気に入りです。

ただし、このメソッドは新しいエンティティをマネージャーに自動的に追加しようとすることを覚えておく必要があります (ここで説明されているように)。したがって、このメソッドを使用するには、Breeze がマネージャにエンティティを追加する前に、新しいエンティティのキ​​ーを初期化する必要があります。次の 3 つの方法のいずれかでそれを行うことができます。

  1. タイプで定義および登録したカスタムコンストラクターで
  2. 定義して型に登録したカスタム初期化子 (両方の手法については、 「エンティティの拡張」ドキュメント ページを参照してください)
  3. createEntity呼び出しの初期化パラメータで。

オプション #3 は次のようになります。

var newThing = manager.createEntity("Thing", {id: Breeze.core.getUuid()});

私はオプション#1を自分で選びます。

于 2013-04-17T07:59:08.090 に答える