我正在使用带有Entity Framework 4.2的Web api和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 Data Connector出现故障。
我在所有表上使用数据注释来控制返回哪些字段。在colors表上,我尝试了以下注释来限制只返回键的属性:
[JsonIgnore]
[IgnoreDataMember]
任何可能导致此问题的想法?
或者,如果我保留颜色并删除,
.Include("tires.hub_caps.sizes")
.Include("tires.hub_caps.sizes.units")
然后这也有效。当一个include语句从一个对象向两个方向分叉时,似乎Sybase Ase连接器不支持这种情况。这有什么方法吗? Sybase Ase和进度数据连接器也会出现同样的问题。
在标准ASP.net MVC控制器类中不会出现此问题 - 问题在于将单个表上的两个一对多关系序列化为JSON。
如果启用了延迟加载,则仍会出现此问题。
在我看来,这是Sybase ASE的一个错误,没有一个连接器能够解决。