我的公司目前正在重写我们最近收购的应用程序。我们选择使用 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; }
}