2012-02-08 75 views
1

我有一个使用sqlgeography的实体/表。实体部分类中的属性

由于EF 4.X不支持空间类型,我只是来回发送字段的字节。

我已经在处理代码端的对话和属性的数据库端存储了procs来完成这项工作。

要在代码中添加属性,我使用了部分类。

其中一个属性是SqlGeography,它只是简单地包装byte []属性来处理获取和设置。

使用NotMappedAttribute从EF隐藏此属性。

另一个是暴露byte []本身的属性,并用EdmScalarPropertyAttribute和DataMemberAttribute装饰。

然后我去EF模型设计器(* .edmx)指向Insert/Update/Delete存储过程的实体模型。

它发现存储的过程是正常的,并意识到它们(在适当时)采用VARBINARY参数。

它还有一个下拉菜单,允许您选择映射到该参数的实体类的属性。

但是,此下拉列表不会列出我的任何属性。我不关心SqlGeography属性,因为它意味着对EF隐藏,但是对于我来说,能够将它指向byte []属性非常重要,因为这是数据的来源。

我非常想避免数据库触发器或包装类和附加字段来使其工作。

我试着手动编辑.edmx文件以包含byte []属性,但它只是抱怨它未映射。

任何人都可以给我一些见解,如何让这个工作?还是选择最终结果的另一种方法?

回答

0

最后,我们会为每个表中的计算列暴露出空间数据作为字节。

然后我们使用存储的特效插入和更新空间数据。

1

我们可以使用视图来为我们创建二进制字段,但这需要手动为数据中的关系创建大量的xml。

这几乎使使用EF这一点变得简单和容易。

对于这个项目我们只需在表格中添加一个二进制字段,然后用sprocs来处理服务器上的会话和部分实体类中的属性,以暴露模型中的地理类型。

下一个项目我怀疑我们会使用EF。 Dapper更加无痛,即使它们涉及更多的代码写入。

下面是如果有人认为这将是适用于他们使用视图链接:

http://thedatafarm.com/blog/data-access/yes-you-can-read-and-probably-write-spatial-data-with-entity-framework/

http://smehrozalam.wordpress.com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables/

相关问题