gpt4 book ai didi

c# - Breeze Web API 具有非常简单的表层次结构继承结构

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:01 24 4
gpt4 key购买 nike

这篇文章 ( https://stackoverflow.com/a/14486260/894358) 表明 Breeze 确实支持继承,但我的 breeze 管理器无法理解从 API 返回的元数据。服务器将从其他操作方法返回元数据和 JSON 结果,但是当管理器尝试解释元数据时,它会抛出错误:“无法读取未定义的 propertyRef”。

这是我非常简单的实现(代码优先迁移生成数据库):

namespace VerySimpleVehicleModel.Models
{
public abstract class Vehicle
{
public int Id { get; set; }
public int Speed { get; set; }
}

public class Bus: Vehicle
{
public int Capacity { get; set; }
}

public class Car : Vehicle
{
public string Color { get; set; }
}

public class VehicleContext : DbContext
{
public DbSet<Car> Cars { get; set; }
public DbSet<Bus> Buses { get; set; }
public DbSet<Vehicle> Vehicles { get; set; }
}
}

namespace VerySimpleVehicleModel.Controllers
{
[BreezeController]
public class BreezeController : ApiController
{
readonly EFContextProvider<VehicleContext> _contextProvider = new EFContextProvider<VehicleContext>();
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable<Car> Cars()
{
return _contextProvider.Context.Cars;

}
}
}

这是从元数据操作方法返回的元数据:

"{
\"schema\":
{
\"namespace\":\"VerySimpleVehicleModel.Models\",
\"alias\":\"Self\",
\"d4p1:UseStrongSpatialTypes\":\"false\",
\"xmlns:d4p1\":\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\",
\"xmlns\":\"http://schemas.microsoft.com/ado/2009/11/edm\",
\"cSpaceOSpaceMapping\":\"
[
[
\\\"VerySimpleVehicleModel.Models.Vehicle\\\",
\\\"VerySimpleVehicleModel.Models.Vehicle\\\"
],
[
\\\"VerySimpleVehicleModel.Models.Car\\\",
\\\"VerySimpleVehicleModel.Models.Car\\\"
],
[
\\\"VerySimpleVehicleModel.Models.Bus\\\",
\\\"VerySimpleVehicleModel.Models.Bus\\\"
]
]
\",\"entityType\":
[
{
\"name\":\"Car\",
\"baseType\":\"Self.Vehicle\",
\"property\":
{
\"name\":\"Color\",
\"type\":\"Edm.String\",
\"fixedLength\":\"false\",\"maxLength\":\"Max\",
\"unicode\":\"true\",\"nullable\":\"true\"
}
},
{
\"name\":\"Bus\",
\"baseType\":\"Self.Vehicle\",
\"property\":{\"name\":\"Capacity\",
\"type\":\"Edm.Int32\",\"nullable\":\"false\"}
},
{
\"name\":\"Vehicle\",
\"abstract\":\"true\",
\"key\":{\"propertyRef\":{\"name\":\"Id\"}},
\"property\":
[
{\"name\":\"Id\",\"type\":\"Edm.Int32\",\"nullable\":\"false\",\"d4p1:StoreGeneratedPattern\":\"Identity\"},
{\"name\":\"Speed\",\"type\":\"Edm.Int32\",\"nullable\":\"false\"}
]
}
]
,\"entityContainer\":
{
\"name\":\"VehicleContext\",
\"entitySet\":
{
\"name\":\"Vehicles\",
\"entityType\":\"Self.Vehicle\"
}
}
}
}"

最佳答案

我无法用您的示例重现问题。事实上,它就像一个魅力。

我几乎一字不漏地复制到the DocCode sample因为它是如此简单,我们需要一个简单的,然后再进入 BillingDetails 示例的复杂性(将发布下一个版本)。

这是一个带有抽象基类的标准 TPH 模型。 key 在元数据中被识别;查看此行的 Vehicle 基类:

\"key\":{\"propertyRef\":{\"name\":\"Id\"}},

奇怪的是您正在接收旧字符串格式的元数据。当我在测试运行中查看元数据的有效负载时,我得到一个 JSON 对象:

{"schema":{"namespace":"Inher ...  "entityType":[{"name":"Vehicle",     "abstract":"true",     "key":{"propertyRef":{"name":"Id"}}, ...}]}]}}}

我怀疑您有 Breeze.WebApi.dll 的旧副本。也许您更新了 Breeze NuGet 包,旧程序集被困在引用中或保留了旧脚本文件。尝试卸载并重新安装 Breeze。仔细查看 NuGet 控制台日志以确保所有内容均已替换

关于c# - Breeze Web API 具有非常简单的表层次结构继承结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16644984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com