如何处理 Entity Framework 中缺少主键的问题?
Posted
技术标签:
【中文标题】如何处理 Entity Framework 中缺少主键的问题?【英文标题】:How do I deal with a lack of a primary key in Entity Framework? 【发布时间】:2012-01-25 00:05:27 【问题描述】:使用 Entity Framework,每当我在 Visual Studio 中“从数据库更新模型”时,创建的模型就无法使用。
问题在于 EF 不能很好地处理没有主键的表。它将它们视为一个视图,从而阻止您使用 EF 编辑表。您可以通过将模型(edmx 文件)作为 XML 文件打开并对 EntitySet 定义进行一些更改来覆盖此行为。一遍又一遍地这样做很烦人。除了添加主键或在每次更新后修改 edmx 文件之外,有没有人找到更永久的解决方法?
顺便说一句,我使用的是唯一键,但它分布在两列中。如果 EF 可以处理这个问题就好了,但从 EF 4.2 开始就不行了。
【问题讨论】:
【参考方案1】:我不明白-您使用的是“唯一键”(我假设您的意思是唯一索引或唯一约束),因为键有两列?您可以创建具有多列的主键。我不确定为什么 EF 会以不同于单列主键的方式处理两列键,但这里有一个多列主键的简单示例:
CREATE TABLE dbo.foobar
(
fooID INT,
barID INT,
PRIMARY KEY (fooID, barID)
);
当然还有其他语法可以让你事后创建约束,你也应该明确地命名你的约束,但只是想展示一个简单的例子。
【讨论】:
啊哈。我之前拥有的是一个唯一的非聚集密钥。如您所述,我删除了它并添加了一个两列主键。 EF 导入这个就好了,这就解决了问题。顺便说一句,我刚刚发现可以通过在SQL Management Studio中选择每一列来添加多列主键,然后单击“添加主键”。很整洁,很有趣,我以前没有发现过。【参考方案2】:顺便说一句,我使用的是唯一键,但它分布在两列中。如果 EF 可以处理这个问题就好了,但是从 EF 4.2 开始就不行了。
Yes it does ;)
【讨论】:
使用 Code First 方法会更好吗?我问的原因是我上面描述的场景(数据库优先)是在 SQL 中定义的两列唯一键,它不会自动移植到 EF。 我遇到了同样的问题。我必须进去并添加一个主键列,并使两个原始列成为唯一索引。然后,只有这样 EF 才能正确导入表。以上是关于如何处理 Entity Framework 中缺少主键的问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 django-rest-framework 中 url 模式中的外键关系
Entity Framework Many to Many Relation Mapping(Entity Framework多对多关系映射)
如何处理缺少的 dll,如 msvcp100.dll、msvcp100.dll?