Breeze 1.4.0导航属性不起作用

时间:2013-08-14 17:13:55

标签: breeze

我一直试图让这个工作相当长一段时间但仍然没有成功......

我有以下型号:

public class Master
{
    [Key]
    public int Id { get; set; }
    public int UserId { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }
    public int Version { get; set; }

    public ICollection<Detail> DetailsList { get; set; }
}

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

    public string Description { get; set; }
    public decimal Amount { get; set; }
    public string Notes { get; set; }
}

我的控制器看起来像这样:

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


[HttpGet]
public IQueryable<Master> Masters()
{
   return _contextProvider.Context.Masters.Include("DetailsList");
}
...

在客户端,我有这样的查询:

...
var query = EntityQuery.from('Masters').expand("DetailsList");

return manager.executeQuery(query)
    .then(querySucceeded)
    .fail(queryFailed);

function querySucceeded(data) {
    var master = data.results[0];

    if (masterObservable) {
        masterObservable(master);
    }
}
...

我遇到的问题是主对象中不存在DetailsList属性,即使我可以在从服务器返回的JSON中看到它。 如果我在breeze.DataService中设置hasServerMetadata:true,则该对象将具有该属性,但显然它不再使用元数据。 这段代码曾经在1.1.3版本中运行得很好但是由于我升级到1.4.0它不再有效。我也试过1.4.1而没有运气。 我假设它与元数据有关,但我无法弄清楚我错过了什么让它再次运作。

1 个答案:

答案 0 :(得分:0)

您必须在Detail实体中定义外键,因为Breeze关联需要外键:

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

    public string Description { get; set; }
    public decimal Amount { get; set; }
    public string Notes { get; set; }

    public int MasterId { get; set; }
    public Master Master { get; set; }
}

您可以在http://www.breezejs.com/documentation/navigation-properties找到有关关联的其他信息。