【发布时间】:2013-10-01 23:46:11
【问题描述】:
我的公司目前正在重写我们最近收购的应用程序。我们选择使用 ASP.net mvc4 来构建这个系统以及使用实体框架作为我们的 ORM。我们收购的公司的前任所有者非常坚持我们使用他们的旧数据库并且不会对其进行任何更改,以便客户可以在我们开发不同模块的同时同时使用我们的产品和旧系统。
我发现旧的表结构没有主键,而是使用唯一索引作为它们的主键。现在,当使用实体框架时,我尝试在结构上匹配他们的表,但由于 EF 生成主键而不是唯一索引而无法这样做。
当我联系了前任老板并解释时,他告诉我“每个表中的唯一键是主键。它们是彼此的同义词。”
我对数据库系统还比较陌生,所以我不确定这是否正确。谁能澄清一下?
他的表在转储到 SQL 时生成:
-- ----------------------------
-- Indexes structure for table AT_APSRANCD
-- ----------------------------
CREATE UNIQUE INDEX [ac_key] ON [dbo].[AT_APSRANCD]
([AC_Analysis_category] ASC, [AC_ANALYSI_CODE] ASC)
WITH (IGNORE_DUP_KEY = ON)
GO
但是我的系统生成:
-- ----------------------------
-- Primary Key structure for table AT_APSRANCD
-- ----------------------------
ALTER TABLE [dbo].[AT_APSRANCD] ADD PRIMARY KEY ([AC_Analysis_category])
GO
编辑: 对此的后续问题是我将如何为此设计模型?我只习惯使用将其定义为主键的 [Key] 注释,没有它,EF 将不会生成该表。 所以是这样的:
[Table("AT_APSRANCD")]
public class Analysis
{
[Key]
public string AnalysisCode { get; set; }
public string AnalysisCategory { get; set; }
public string ShortName { get; set; }
public string LongName { get; set; }
}
【问题讨论】:
-
查看我的答案以获取 EF 中的示例复合键。
-
注意其他区别:原始超过两列,原始忽略重复值。
-
如果数据库已经存在,为什么不让 EF 生成所有实体?
-
因为当前版本的 EF 不支持对我更熟悉的注释模型进行逆向工程。
-
我已经安装了,我相信注释模型支持即将推出。 entityframework.codeplex.com/workitem/508
标签: c# sql sql-server asp.net-mvc entity-framework