我有一个写得非常糟糕的遗留SQL Server数据库,我需要编写代码。遗憾的是,许多尚未更新的遗留应用程序仍在针对此数据库运行。我想我会使用实体框架来干净地编写我的C#应用程序代码。
我的表格如下所示。
矢量
不幸的是,Vector。 Info 是一系列逗号分隔的值,我需要能够干净地编辑它们。 Vector.Info中的条目示例可以是:150,-56,36,866(它们以特定顺序对应于X,Y,Z,T)。我知道这是一个糟糕的反模式,使用实体框架处理这个问题的最佳方法是什么?
答案 0 :(得分: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,就可以创建导航属性。
你必须处理更新。当其中一个坐标发生变化时,您可能需要拆分字符串并用新坐标重新组合。