我有一个使用sqlgeography的实体/表。
由于EF 4.X不支持空间类型,我反而会来回发送字段的字节。
我在数据库端存储了procs,它处理代码端的转换和属性来完成这项工作。
要在代码中添加属性,我使用了部分类。
其中一个属性是SqlGeography,它只包含byte []属性来处理获取和设置。
使用NotMappedAttribute将此属性从EF隐藏。
另一个是暴露byte []本身的属性,并使用EdmScalarPropertyAttribute和DataMemberAttribute进行修饰。
然后我转到EF模型设计器(* .edmx)将实体模型指向插入/更新/删除存储过程。
它找到存储过程正常并意识到它们(在适当的时候)采用VARBINARY参数。
它还有一个下拉列表,允许您在实体类上选择一个映射到该参数的属性。
但是这个下拉列表没有列出我的任何属性。我不关心SqlGeography属性,因为这意味着要从EF中隐藏,但是对于我来说,能够将它指向byte []属性是至关重要的,因为这是数据的来源。
我非常希望避免使用数据库触发器或包装类和附加字段来使其适应工作。
我尝试手动编辑.edmx文件以包含byte []属性,但它只是抱怨它未映射。
有谁能给我一些有关如何使其发挥作用的见解?或者是获得最终结果的另一种方法?
答案 0 :(得分:1)
我们可以使用视图为我们创建二进制字段,但这需要手动为数据中的关系创建大量的xml。
这使得使用EF变得非常简单,这使得生活简单易行。
对于这个项目,我们只需要在表中添加一个二进制字段,然后使用sprocs来处理服务器上的转换和部分实体类中的属性,以便在模型中公开地理类型。
下一个项目我怀疑我们会使用EF。 Dapper是如此的无痛,即使有更多的代码写作涉及。
以下是使用视图的链接,如果有人认为它适用于他们:
答案 1 :(得分:0)
最后,我们为每个表创建了一个计算列,将空间数据公开为字节。
然后我们使用存储过程来插入和更新空间数据。