我使用EF 6代码第一种方法。除了数据库级别的数据库约束检查之外,我还想在POCO级别提供唯一的约束检查。我已经关注文章Setting unique Constraint with fluent API?,其中有人建议使用[Index()]属性。 我在我的poco类中应用了相同的内容,但看起来它仍然从数据库级别引发异常。
这是我的代码:
[Key]
public decimal OrderId { get; set; }
[Index("ORDER_CC", 2, IsUnique = true)]
public decimal? MemberId { get; set; }
[Index("ORDER_CC", 3, IsUnique = true)]
public decimal? ItemId { get; set; }
[Index("ORDER_CC", 1, IsUnique = true)]
public decimal? OrderNumber { get; set; }
public decimal? Cost { get; set; }
public DateTime Time { get; set; }
我不确定我在这里做错了什么?
我还想问下列内容:
这是我的数据库脚本:
CREATE UNIQUE INDEX xyz.ORDER_CC ON xyz.Order
(OrderNumber, MemberId, ItemId)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 128K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
有什么想法吗?
答案 0 :(得分:2)
问题不在于索引属性,而在于您对它的作用的期望。
“索引”属性未验证唯一约束,它仅指示实体框架代码优先于create an index in the database during a migration。从您的问题可以清楚地看出,您首先使用EF代码,即POCO和编码映射,但您使用的是预先存在的数据库。在这种情况下,应用索引属性是没用的。
这样也可以在数据库中回答检查约束的问题。这就是为什么它仍然会抛出错误的原因。如果您想在代码中使用唯一约束,则必须自己编写。
答案 1 :(得分:0)
我已在code project
发布了相关信息通常,它取决于您在类上生成唯一索引的属性
感谢Shimmy的回答 https://stackoverflow.com/a/15999805/105445
您可以通过创建自定义ValidationAttribute
来自行完成,以通用方式验证属性。然后你可以像这样使用它:
[ShouldBeUnique()]
public string SomeProperty { get; set; }
看一下这个例子