1

Breeze サポートの推奨に従って 1.4.1 にアップグレードしましたが、次の問題が発生しています。以前は、新しく作成されたエンティティのナビゲーション プロパティが定義されていましたが、null 値のノックアウト オブザーバブルがありました。これを示すために、Breezejs TODO アプリケーションを変更しました。

私のデータモデルは以下で、私のフロントエンドコードはここにあります:

function reproduce() {
  breeze.NamingConvention.camelCase.setAsDefault();
  var manager = new breeze.EntityManager(serviceName);
  manager.fetchMetadata().then(function () {
    var parent = manager.createEntity('Parent');
    console.log('otherProperty ' + parent.otherProperty());
    console.log('childOne ' + parent.childOne());
    // I cannot call parent.childrenTwo() since childrenTwois undefined
    console.log('childrenTwo ' + parent.childrenTwo);
  });
}

問題は、breeze の以前のバージョンでは、プロパティ otherProperty と childOne が null 値を持つノックアウト オブザーバブルになり、プロパティ childrenTwo が空のオブザーバブル配列になることです。しかし、コンソールに表示されるように、3 つのプロパティはすべて未定義ですか? これは意図的なものですか?

もちろん、それらを自分で定義することもできますが、それは大変な作業であり、簡単にできると思っています。また、Breeze のドキュメントによると、「メタデータに既に記述されているプロパティを定義する理由はめったにありません。」http://www.breezejs.com/documentation/extending-entities

更新 1:

Jay Traband のおかげで、再生アプリで大文字と小文字を正しく設定していませんでした。ただし、 childrenTwo はまだ定義されておらず、監視可能な配列である必要があると思います。私の本番アプリでは大文字と小文字が設定されているため、再調査する必要があります。

更新 2:

Jay Traband のおかげで、breeze メタストアは ChildTwo 型を認識していないことがわかりました。したがって、どういうわけか登録していないようですか?私は、Entity Framework よりも Java Hibernate に精通しています。以下のデータ モデルに欠けているものはありますか?

更新 3:

ChildTwo には明示的な外部キーがありませんでした。それを追加したところ、機能しました。Breeze が明示的な外部キーを必要としていることを心に留めておく必要があると思います。

public class ChildTwo
{
  [Key]
  public int Id { get; set; }

  public int ParentId { get; set; }

  [ForeignKey("ParentId")]
  public Parent Parent { get; set; }
}

データ・モデル。

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Todo.Models
{
  public class Parent
  {
    public Parent()
    {
      ChildrenTwo = new List<ChildTwo>();
    }
    [Key]
    public int Id { get; set; }

    [Required]
    public string OtherProperty { get; set; }

    [Required]
    public ChildOne ChildOne { get; set; }

    [Required]
    public IList<ChildTwo> ChildrenTwo { get; set; }
  }
  public class ChildOne
  {
    [Key]
    [ForeignKey("Parent")]
    public int Id { get; set; }

    public Parent Parent { get; set; }
  }
  public class ChildTwo
  {
    [Key]
    public int Id { get; set; }

    public Parent Parent { get; set; }
  }
} 
4

1 に答える 1

1

簡単なテストをいくつか行っただけで、これを再現できませんでした。createEntityを呼び出した後、すべてのテストでエンティティのナビゲーション プロパティがノックアウト オブザーバブルとして表示されます。いくつかのアイデア;

うっかりしていないことを確信していますか

  • ノックアウトの代わりにbackingStoreまたはバックボーンモデル ライブラリを使用します。Breeze.config.initializeAdapter経由。
  • プロパティに異なるケーシングを適用します。つまり、breeze.NamingConventionを使用します。
于 2013-08-17T17:20:25.523 に答える