我们合作的产品包含非常混乱的数据库(它不是我们的产品)
我们经常需要编写从数据库读取或写入数据的应用程序。
我想在数据库之上创建一个层,使我们的应用程序更容易使用。最后,我希望有一个层可以:
所有这一切都必须在不改变数据库中的任何内容的情况下完成,即没有视图,SP等。
我用Linq2Sql做了一些实验,看起来效果很好。 使用sqlmetal和一些正则表达式魔法我创建了看起来像的实体:
[Column(Name="Quantity", CanBeNull = true, DbType="Int")]
private int? _Quantity;
...
[Column(Storage = "_Quantity", DbType = "Int")]
public int Quantity {
get { return _Quantity ?? 0; }
set { _Quantity = value; }
}
然后我手动添加所需的导航属性。
不幸的是,投资linq2sql似乎是一件坏事。如果我想要OData,我需要使用实体框架。问题是如果表没有主键(并且所有字段都允许为null,那么设计者只在模型中显示错误消息),实体框架根本不起作用
关于如何做到这一点的任何想法?
我知道它不会是自动的,我愿意投入一些时间来开发工具并手动编辑一些东西。数据库模式是稳定的,更改只包括新的列和表(即没有删除,名称更改或类型更改)
答案 0 :(得分:1)
您可以使用LINQ to SQL进行OData。
也就是说,没有PK,EF工作正常(以及任何......)。想知道PK的是设计师。因此,您必须自己定义EDMX,使用Code-First,或者使用真正的PK制作“假”数据库来创建模型,然后在运行时切换到“无PK”版本。