【问题标题】:How do I deal with a lack of a primary key in Entity Framework?如何处理 Entity Framework 中缺少主键的问题?
【发布时间】:2012-01-25 00:05:27
【问题描述】:

使用 Entity Framework,每当我在 Visual Studio 中“从数据库更新模型”时,创建的模型就无法使用。

问题在于 EF 不能很好地处理没有主键的表。它将它们视为一个视图,从而阻止您使用 EF 编辑表。您可以通过将模型(edmx 文件)作为 XML 文件打开并对 EntitySet 定义进行一些更改来覆盖此行为。一遍又一遍地这样做很烦人。除了添加主键或在每次更新后修改 edmx 文件之外,有没有人找到更永久的解决方法?

顺便说一句,我使用的是唯一键,但它分布在两列中。如果 EF 可以处理这个问题就好了,但从 EF 4.2 开始就不行了。

【问题讨论】:

    标签: .net visual-studio-2010 sql-server-2008 entity-framework


    【解决方案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 才能正确导入表。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2017-05-20
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多