2012-02-29 82 views
1

我有一个写得很差的遗留SQL Server数据库,我需要对其进行编码。不幸的是,还没有更新的许多其他遗留应用程序仍在运行该数据库。我想我会使用实体框架干净地编码我的C#应用​​程序。实体框架数据库首先为一个写得不好的数据库

我有一张如下所示的表格。

矢量

  • VectorId(INT)PK
  • 名称(VARCHAR)
  • 信息(VARCHAR)

不幸的是矢量。 信息是一系列逗号分隔值,我需要能够干净地进行编辑。 Vector.Info中的条目示例可以是:150,-56,36,866(它们对应于特定顺序中的X,Y,Z,T)。我知道这是一个糟糕的反模式什么是使用实体框架来处理这个问题的最佳方式?

回答

1

EF不支持表值函数,在路上他们没有组合的,所以你不能使用像

from c in Vectors 
    where fnInfo(c).Any(f=>f.X == 150) 
    select c 

查询,你可以在这种情况下,要做的就是创建一个视图VectorId, Name, Info, X, Y, Z, T,因为它似乎分裂是固定的,它总是产生这些坐标。

通过这种方式,您可以在其他EF套件上进一步使用此视图。只要视图在模型中设置了PrimaryKey,您就可以创建导航属性。
你必须处理更新。当其中一个坐标发生变化时,可能需要拆分字符串并用新坐标重新组合。

+0

EF 5 Beta支持Db First方法中的表值函数。 http://blogs.msdn.com/b/adonet/archive/2012/02/29/ef4-3-1-and-ef5-beta-1-available-on-nuget.aspx – 2012-02-29 19:57:26

+0

附带.Net框架4.5 – 2012-02-29 20:07:32

相关问题