我的公司目前正在重写我们最近购买的应用程序。我们选择使用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; }
}
UNIQUE约束唯一地标识数据库表中的每个记录。
UNIQUE和PRIMARY KEY约束都为一列或一组列的唯一性提供保证。
PRIMARY KEY约束自动在其上定义了UNIQUE约束。
请注意,每个表可以有许多UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束。
另外,从创建唯一索引
如果该列在多行中包含NULL,则不能在该列上创建唯一索引。同样,如果列的组合在多行中包含NULL,则不能在多列上创建唯一索引。出于索引目的,将它们视为重复值。
而从创建主键
在PRIMARY KEY约束中定义的所有列都必须定义为NOT NULL。如果未指定可空性,则所有参与PRIMARY KEY约束的列的可空性均设置为NOT NULL。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句