今天刚开始尝试Breeze,很久以来EF用户 - 我觉得我在Breeze中发现了一个错误,但我可能做错了什么 - 想知道它是什么:
我在EF Code First中有一个简单的层次结构:
// For testimonials about the product line in general
public class Testimonial
{
public int Id { get; set; }
public string Text { get; set; }
}
// For testimonials specific to a single product
[Table("ProductTestimonial")]
public class ProductTestimonial : Testimonial
{
public Product Product { get; set; }
}
所以要明确这里有2个表,Testimonial和ProductTestimonial,都有一个Id的PK和一个Text字段,其中一个也有一个FK off到Product。这只是实现Table Per Type的一种简单方法。
所以我通过WebApi设置了BreezeController:
[BreezeController]
public class EFController : ApiController
{
private readonly EFContextProvider<EfDb> _db = new EFContextProvider<EfDb>();
[HttpGet]
public string Metadata()
{
return _db.Metadata();
}
然后我在breeze.js中加载它:
var manager = new breeze.EntityManager('/api/ef');
manager.executeQuery(breeze.EntityQuery.from('Product');
Kablamo。例外。它说:
无法获取属性'propertyRef'的值:object为null或undefined
目前:
function convertFromODataEntityType(... {
. . .
var keyNamesOnServer = toArray(odataEntityType.key.propertyRef)...
odataEntityType.name == 'ProductTestimonial'
和.key
确定不确定的地方。
这是真的。挑选事物,当我调用executeQuery()时,Breeze点击WebApi上的元数据调用,我验证了调用并成功返回。从那里返回的大量JSON字符串包括:
{
"name": "ProductTestimonial",
"baseType": "Self.Testimonial",
"navigationProperty": {
"name": "Product",
"relationship": "Self.ProductTestimonial_Product",
"fromRole": "ProductTestimonial_Product_Source",
"toRole": "ProductTestimonial_Product_Target"
}
},
{
"name": "Testimonial",
"key": {
"propertyRef": {
"name": "Id"
}
},
所以看起来基本的问题是元数据准确地将ProductTestimonial描绘为一个继承的类,其键在别处被定义,但是Breeze.js - 如果我正确地理解它 - 只是天真地检查.key属性不考虑超类。但是,我可能错了,因为我对Breeze很新。
附录:
我不认为它在这里是相关的,但如果它出现,是的,我在WebApi控制器上也有一个IQueryable:
[HttpGet]
public IQueryable<Product> Products()
{
return _db.Context.Products;
}
另外,我认识到这里潜在的解决方法可能是放弃TPT并为每个没有继承的实体制作完整的类,但我真的在这里减肥 - 在EF模型中有很多继承必须留。如果它是继承或Breeze,Breeze就会获得斧头。
答案 0 :(得分:2)
继承即将到来但我们还没有固定的日期。请在Breeze User Voice上投票赞成该功能。我们非常重视这些建议。
答案 1 :(得分:0)
我认为manager.fetchEntityByKey不适用于继承 - 任何Breeze人都可以确认这是否正确?它似乎是从我的基类中获取继承的字段,而不是从我的派生类中获取字段。我可以通过使用entityQuery来获取完整的对象,但是我必须为每个字段命名。当我这样做时,我仍然在ko绑定上得到解析错误。