0

エンティティにプロパティを動的に追加するにはどうすればよいですか? 私は探してきましたが、何も見つかりませんでした。

たとえば、次のモデル定義があります (WebSQL プロバイダーを使用しています)。

$data.Entity.extend('$db.Types.Person', {
        id: { type: 'int', key: true, computed: true },
        name: { type: 'string' }
    });

$data.EntityContext.extend('$db.Types.DBContext', {
        Persons: { type: $data.EntitySet, elementType: $db.Types.Person},
    });

ある時点で、モデルを新しいプロパティで拡張する必要があります。最初は、これらのプロパティの名前がわかりません。

4

1 に答える 1

1

この構文は非常に単純ですが、背景情報はより重要です。スニペットを再利用する前に、回答全体をお読みください。

YourType は、関数を使用して新しいフィールドで拡張できますYourType.addMember()。このスニペットの例を参照してください。

$data.Entity.extend('Product', {
  id: { type: 'int', key: true, computed: true },
  Name: { type: 'string' }
});

$data.EntityContext.extend('Northwind', {
  Products: { type: $data.EntitySet, elementType: Product},
});

Product.addMember('Description', {
    type:'string', 
    key: false, 
    computed: false, 
    required: false
});

var context = new Northwind({provider: 'webSql', databaseName: 'Northwind'});

context.onReady(function() {
    var product1 = new Product({ Name: 'Beer', Description: 'tasty'});
    context.Products.add(product1);
    context.saveChanges(function(result) {
        //check the content of WebSQL DB
        console.log(product1);
    });
});

addMember()コンテキストのインスタンスを作成する前にのみ使用できます。

重要な情報: ライブラリにはデータの移行/マージはありません。webSql のスキーマ変更のデフォルトの動作は、DB を削除して再作成することです。IndexedDB はスキーマにバインドされていないため、既存のレコードは削除されません。このコードを実行して、さらにフィールドを追加してみてください。これは動作中のJSFiddleです。

本当の解決策は、JayData Pro の Schema Evolution モジュールを使用しデータ モデルの変更を管理することです。

于 2013-08-23T15:16:46.087 に答える