ADO.NET数据模型中的替代/候选键

问题描述:

我需要有一个实体具有两个独立的候选键,其中一个是主键,它是代理标识键,另一个是替代键代表真正的独特属性。我需要在我的实体中分别拥有它们。请注意,我并不是指复合键或多列键。无论如何,我需要在ADO.NET数据模型中的一个实体上有这个。有可能这样做吗?如果是,请指导我。ADO.NET数据模型中的替代/候选键

拥有第二个关键的原因是我需要另一个实体与该关键字上的第一个实体有关联(和外键)关系。

更新:我在以下问题中发现了与我非常相似的情况: http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/a248632a-d305-4c15-8e57-6742457cca94 EF v1似乎不支持此功能。有人知道V4(字面上是第二个版本)是否具有此功能?我发现了以下内容,但似乎并未显示此功能已添加到当前版本的任何线索:http://blogs.msdn.com/b/adonet/archive/2009/05/11/update-on-the-entity-framework-in-net-4-and-visual-studio-2010.aspx

+2

您的问题很不清楚。您似乎有两个在此表空间上唯一的键,其中一个是自动生成的整数序列键,另一个是唯一的ID。你希望它们都显示为表的主键?在这种情况下,不可以,只能选择一个作为主键。每个表只有一个主键。但是你可以在另一列建立一个索引。 – 2011-03-15 03:21:34

+1

@Stephen好的,也许这是因为我已经在关系数据模型语言中表达了这个问题。我知道你当然只能有一个主键。这就是为什么我将其他人称为关系数据库语言中的备用关键字的原因。它确实是一个独特的属性。您可以轻松地对任何非主键属性设置此唯一性约束,并将其设置为“备用键”。我只想知道是否有可能从ADO.NET EDM/EDM设计器中产生这种约束?或者如果我直接将它添加到底层表,它是否会识别这个约束? – amirmonshi 2011-03-15 03:32:44

+0

您提到EDM。你在使用实体框架吗? – 2011-03-15 06:12:32

实体框架不支持唯一键。在实体模型中,您的第二把钥匙将与其他钥匙一样。您将无法在该密钥上创建关系,并且EF不会检查该密钥的值是否唯一。但是,如果您的模型将基于具有唯一键的现有数据库,则您将在数据库层上进行此检查。

英孚团队暗示支持唯一密钥,但remains unavailable as of .NET 4.5暗示。

+0

+1感谢您的回答。我还怀疑,应该是这样的,阅读我发布的链接。顺便说一句,你有什么想法为什么人们低估了我的问题?这是不好的?!:)) – amirmonshi 2011-03-15 06:45:47

+0

我不知道为什么有人低估了你。 – 2011-03-15 07:53:51

+0

已投票的问题。对主键和代理键的EF支持是一个相关的主题。数据库支持备用唯一索引上的外键约束,因此EF最终识别这些关系是有意义的。 – Technobabble 2013-03-29 18:45:16

如果你使用Code First和流利的API,创建两个单独的DbContexts可能是一个很好的解决方案。您可以为要在导航属性中使用的每个键编写单独的EntityTypeConfiguration类。我们也在我们的项目中遇到了这个问题,并且我写了一篇描述我们解决方案的博客文章:http://mmilleruva.blogspot.com/2013/10/working-with-legacy-database-schemas.html

+0

如果您的唯一键有执行实体拆分的表的外键,那该怎么办? – 2014-07-28 09:18:17