Sql server EF数据库没有PKs-好主意/坏主意/Fuhgeddaboudit

Sql server EF数据库没有PKs-好主意/坏主意/Fuhgeddaboudit,sql-server,database,entity-framework,orm,Sql Server,Database,Entity Framework,Orm,关于这一点,网络上有很多相互矛盾和令人困惑的建议。我想为我自己和任何一个将来会寻找这些信息的人解决这个问题 问题是,实体框架是否能很好地处理没有主键的表的数据库 细节:我有一个数据库,它有很多没有指定PK的表。称之为糟糕的设计或其他什么,但现在我无法改变模式。我必须和它一起工作。我们希望使用EF,因为我们喜欢MS,我们一直使用MS工具。我们睡得容易多了,因为MS将不断更新和支持这个EF,并在未来充分关注它。好的,现在是我最迫切的问题,我在这个网站和其他网站上过度研究了这个问题。“我可以在我的项目

关于这一点,网络上有很多相互矛盾和令人困惑的建议。我想为我自己和任何一个将来会寻找这些信息的人解决这个问题

问题是,实体框架是否能很好地处理没有主键的表的数据库

细节:我有一个数据库,它有很多没有指定PK的表。称之为糟糕的设计或其他什么,但现在我无法改变模式。我必须和它一起工作。我们希望使用EF,因为我们喜欢MS,我们一直使用MS工具。我们睡得容易多了,因为MS将不断更新和支持这个EF,并在未来充分关注它。好的,现在是我最迫切的问题,我在这个网站和其他网站上过度研究了这个问题。“我可以在我的项目中使用EF吗?我完全知道我的DB有一些永远不会有PKs的表。”。问题的一部分是我们真的想使用EF以便于使用,而我们是MSphiles

我听到了很多建议,包括:

  • 这行不通
  • 可以让它工作
  • 没什么大不了的

  • 这就是它真正生病的地方。请告知

    这在很大程度上取决于你打算如何使用它。如果没有主键,就不能具有引用完整性。因此,实际上您不能自动查找子表之类的内容

    您可以手动连接表,这应该可以。。但这严重限制了EF的功能


    但事情是这样的,我们说什么都不能说服你。说服你的是你自己。构建一个测试数据库和一个测试应用程序。设置EF数据库。看看它是否适合你。

    嗯,这在很大程度上取决于你打算如何使用它。如果没有主键,就不能具有引用完整性。因此,实际上您不能自动查找子表之类的内容

    您可以手动连接表,这应该可以。。但这严重限制了EF的功能


    但事情是这样的,我们说什么都不能说服你。说服你的是你自己。构建一个测试数据库和一个测试应用程序。设置EF数据库。看看它是否对你有用。

    你为什么真的想这么做?就像我说的,如果我们能用EF做到这一点,那就是我们的第一选择。我愿意接受任何其他好的/可靠的选择。当有候选键(允许组合键)时,可以这样做。您必须100%确定这些键始终适用。这可能就是人们怀疑的原因。我不能责怪他们。任何没有主键的数据库都可能属于Fuhgeddaboudit类别。如果每个表上都有唯一的键(约束)未正式标记为主键,则可以。如果在(大多数)表上没有唯一的约束,那么设计就太糟糕了,不值得考虑。这些评论与EF或任何其他技术无关;这是对数据库设计的评估。实际上,设计表时的第二个问题应该是“主键是什么?”。(第一个问题是‘表代表什么或存储什么?’当然)。为什么你真的要这么做?就像我说的,如果我们可以用EF来做,那就是我们的第一选择。我愿意接受任何其他好的/可靠的选择。当有候选键(允许组合键)时,可以这样做。您必须100%确定这些键始终适用。这可能就是人们怀疑的原因。我不能责怪他们。任何没有主键的数据库都可能属于Fuhgeddaboudit类别。如果每个表上都有唯一的键(约束)未正式标记为主键,则可以。如果在(大多数)表上没有唯一的约束,那么设计就太糟糕了,不值得考虑。这些评论与EF或任何其他技术无关;这是对数据库设计的评估。实际上,设计表时的第二个问题应该是“主键是什么?”。(第一个问题是‘表代表或存储什么?’)。我可以像你提到的那样使用EF测试它,但它很难对我在实际项目中处理的庞大/复杂的数据库做出现实的评估。那么,nHibernate是否适合我的情况(没有PKs)?我仍然没有从任何人那里得到一个具体的答案:-)@Ohark-一个没有主键的巨大复杂的数据库本质上是随机噪声。您没有办法将任何列标识为唯一的,也没有确保唯一性的约束,等等。。编写SQL来处理这个问题也将是一场混乱。我怀疑其他任何ORM都更适合,因为它们都基于主键。linq到sql怎么样?对这个选择有什么想法吗?谢谢你的帮助help@Ohark-如果没有PK,同样的问题没有工具可以帮助您-您必须定义PKs,大多数工具都假设有某种程度的合格数据设计,没有PKs表明没有合格设计。唯一可以改进的方法是改进数据库,这样一个工具就可以工作了。我可以像你提到的那样使用EF测试它,但它很难给我一个真实的评估,我将在实际项目中处理庞大/复杂的数据库。那么,nHibernate是我的情况(没有PKs)的一个很好的候选者吗?我仍然没有从任何人那里得到一个具体的答案:-)@Ohark-一个没有主键的巨大复杂的数据库本质上是随机噪声。您没有办法将任何列标识为唯一的,也没有确保唯一性的约束,等等。。编写SQL来处理这个问题也将是一场混乱。我怀疑其他任何ORM都更适合,因为它们都基于主键。linq到sql怎么样?对这个选择有什么想法吗?谢谢你的帮助help@Ohark-如果没有PK,同样的问题没有工具可以帮助您-您必须定义PKs,大多数工具都假设有某种程度的合格数据设计,没有PKs表明没有合格设计。改进的唯一方法是改进数据库,这样一个工具就可以