C# 实体框架数据库首先用于写得不好的数据库

C# 实体框架数据库首先用于写得不好的数据库,c#,sql,entity-framework,anti-patterns,C#,Sql,Entity Framework,Anti Patterns,我有一个写得非常糟糕的遗留SQL Server数据库,需要对其进行编码。不幸的是,许多其他尚未更新的遗留应用程序仍在针对该数据库运行。我想我应该使用实体框架来清晰地编码我的C#应用程序 我有一张如下所示的桌子 向量 向量(INT)PK 名称(VARCHAR) 信息(VARCHAR) 不幸的是,Vector.Info是一系列逗号分隔的值,我需要能够干净地编辑它们。例如,Vector.Info中的一个条目可以是:150,-56,36866(它们按照特定顺序对应于X,Y,Z,T)。我知道这是一个糟

我有一个写得非常糟糕的遗留SQL Server数据库,需要对其进行编码。不幸的是,许多其他尚未更新的遗留应用程序仍在针对该数据库运行。我想我应该使用实体框架来清晰地编码我的C#应用程序

我有一张如下所示的桌子

向量

  • 向量(INT)PK
  • 名称(VARCHAR)
  • 信息(VARCHAR)

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

EF不支持表值函数,因为它们不可组合,所以不能使用类似的查询

 from c in Vectors
    where fnInfo(c).Any(f=>f.X == 150)
    select c
在这种情况下,您可以为
VectorId、Name、Info、X、Y、Z、T
创建一个视图,因为分割似乎是固定的,它总是生成这些坐标

通过这种方式,您可以进一步将此视图与其他EF集一起使用。只要视图在模型中设置了PrimaryKey,就可以创建导航属性。

你必须处理这些更新。当其中一个坐标被更改时,您可能必须拆分字符串并用新坐标重新组合它。

EF不支持表值函数,因为它们不可组合,所以您不能使用类似的查询

 from c in Vectors
    where fnInfo(c).Any(f=>f.X == 150)
    select c
在这种情况下,您可以为
VectorId、Name、Info、X、Y、Z、T
创建一个视图,因为分割似乎是固定的,它总是生成这些坐标

通过这种方式,您可以进一步将此视图与其他EF集一起使用。只要视图在模型中设置了PrimaryKey,就可以创建导航属性。

你必须处理这些更新。当其中一个坐标发生变化时,您可能必须拆分字符串并用新坐标重新组合它。

EF 5 Beta支持Db First方法中的表值函数。EF 5 Beta支持Db First方法中的表值函数。