我们目前正在实施OData服务,作为使用我们自己的僵硬WebApi端点的替代方案。这在纸面上听起来不错,但我们遇到了一些主要问题 - 大多数问题都与OData端点更新之间的可维护性有关。
我们正在使用EF Database First方法来建模我们的数据。这有问题,因为一旦您获得建模数据,它就不会注释主键。我希望它将[Key]属性放在属性上,但我们必须手动执行此操作:
using System.ComponentModel.DataAnnotations;
...
[Key]
public long Id { get; set; }
这似乎是edmx模板文件可以自动执行的操作,但显然它不是内置的。
为了使问题更复杂,更新模型是一件痛苦的事。我们实际上不能只是右键单击设计器图并使用更新模型功能,因为它不可靠。我们尝试将存储过程包含到我们已经创建的模型中,但它没有更新。因此,每当我们想要进行更改时,我们都必须重做整个图表。另外,为建模的存储过程生成的代码没有我们想要的返回值。这意味着我们每次进行更改并添加密钥时都必须重新创建图表 - 但我们必须更新存储过程返回。那只是一场噩梦!
所以真正的问题是 - 有更好的做法吗?使用Code First是更好的解决方案吗?如果是这样,使用Code First和通过OData公开实体的一般流程是什么?
我们正在努力寻找一种解决方案,使OData值得付出努力,并且在没有大量麻烦的情况下无法取得任何成功。对类似项目的任何看法都会非常感激。