2

私は現在、Web APIやノックアウトなどを使用してSPAを構築しています。これまでのところ、独自の単純なデータコンテキストを作成しており、非常にうまく機能しました。そよ風にぶつかって、試してみる価値があるのではないかと思いました。特に、エンティティ間のナビゲーションについてより簡単なアプローチをとることを望んでいました...

エンティティまたは単一のエンティティをそよ風でロードすることは問題なく機能しました。ナビゲーションプロパティの操作は機能しないようです。1対多の関係であっても、ナビゲーションプロパティは常に空です。

これが私のモデルです(簡略化):

public class WorkdayHours
{
    public int Id { get; set; }

    public bool IsWorkDay { get; set; }
    ...
    public Byte WeekDay { get; set; }
}

public class Service
{
    public int Id { get; set; }
    public string DisplayName { get; set; }
    public virtual ICollection<WorkdayHours> BookableDays { get; set; }
}
public class Employee
{
    public int Id { get; set; }
    public string DisplayName { get; set; }
    public virtual ICollection<WorkdayHours> BookableDays { get; set; }
}
public class Shop
{
    public int Id { get; set; }
    public string DisplayName { get; set; }
    public virtual ICollection<WorkdayHours> BookableDays { get; set; }
}

次に、次のようにエンティティサービスとSPAを取得します。

var query = EntityQuery
            .from('Services')   
            .where('id', 'eq', serviceId)
            .expand('BookableDays'); 

クエリを実行すると、bookableDayプロパティを除くすべてのデータを含む要求されたサービスエンティティが常に空の配列になります。Jsonの回答を確認すると、workdayHoursも送信され、そよ風がこのエンティティの定義済みのctorを呼び出すことさえあります。ただし、bookableDaysプロパティ自体にはリンクされていません。

生成されたDBモデルをチェックするとき、EFは、サービス、従業員、およびショップの外部キーを、期待どおりにworkdayHoursに生成しました。

そよ風はいくつかのオプションの外国キーを持つことができませんか?

提案やアイデアは非常に高く評価されています。

4

1 に答える 1

3

Breezeは外部キーに依存しています。私も同様の問題を抱えていました。これで解決するはずです。EFは私と関連するエンティティのForeignKeysをまだ空の状態で生成していました。私の知る限り、breezeにはForeignKeyフィールドの明示的な注釈/構成が必要です。

public class Mvl
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long MvlId{ get; set; }

    public DateTime CreatedAt { get; set; }

    [InverseProperty("Mvl")]
    public ICollection<MvlOP> MvlOps { get; set; }

    public DateTime? ReleasedAt { get; set; }
    public DateTime? LockedAt { get; set; }
    public DateTime? ClosedAt { get; set; }

    //[ConcurrencyCheck]
    //public int? RowVersion { get; set; }

    [Timestamp]
    public byte[] TimeStamp { get; set; }
}

public class MvlOP
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long MvlOpId { get; set; }


    public long MvlId { get; set; }
    [ForeignKey("MvlId")]
    public Mvl Mvl { get; set; }

...
}
于 2013-01-10T00:42:27.123 に答える