0

我将 Web api 与 Entity Framework 4.2 和 Sybase Ase 连接器一起使用。

在我尝试添加新表之前,这可以正常返回 JSON。

  return db.car
             .Include("tires")
             .Include("tires.hub_caps")
             .Include("tires.hub_caps.colors")
             .Include("tires.hub_caps.sizes")
             .Include("tires.hub_caps.sizes.units")
             .Where(c => c.tires == 13);

如果删除以下行,上述工作没有问题:

.Include("tires.hub_caps.colors")

但是,当包含该行时,我收到错误:

""准备命令定义时发生错误。有关详细信息,请参阅内部异常。”

内部异常显示:“InnerException = {”不支持指定的方法。”}”“source = Sybase.AdoNet4.AseClient”

以下也会导致错误:

  List<car> cars = db.car.AsNoTracking()
             .Include("tires")
             .Include("tires.hub_caps")
             .Include("tires.hub_caps.colors")
             .Include("tires.hub_caps.sizes")
             .Include("tires.hub_caps.sizes.units")
             .Where(c => c.tires == 13).ToList();

错误如下:

An exception of type 'System.Data.EntityCommandCompilationException' occurred in System.Data.Entity.dll but was not handled in user code

Additional information: An error occurred while preparing the command definition. See the inner exception for details.

内部异常:"Specified method is not supported."

这表明 Sybase Ase 数据连接器存在故障。

我在所有表上使用数据注释来控制返回哪些字段。在颜色表上,我尝试了以下注释来限制仅返回键的属性:

[JsonIgnore]
 [IgnoreDataMember]

任何想法可能导致此问题?

或者,如果我保留颜色并移除,

 .Include("tires.hub_caps.sizes")
 .Include("tires.hub_caps.sizes.units")

那么这也有效。似乎 Sybase Ase 连接器不支持 include 语句从一个对象在两个方向上分叉的情况。有办法解决这个问题吗?Sybase Ase 和进度数据连接器也会出现同样的问题。

该问题不会出现在标准 ASP.net MVC 控制器类中 - 问题在于将单个表上的两个一对多关系序列化为 JSON。

如果打开延迟加载,此问题仍然存在。

在我看来,这是 Sybase ASE 的一个错误,没有一个连接器能够解决。

4

0 回答 0