我正在使用 MVC4、EF5 和 SQL Server 2012 Express LocalDB。Customer
域模型具有Phone
和Email
字段。任何一个都可以为空,但至少必须填充一个。
我在客户端和服务器端都使用 FluentValidation 来确保这一点。
但是,当我需要保留模型时,我遇到了 EF5 的限制。如果我将两者都设为必需,则持久代码将失败,但如果我将它们都设为可选:
...
this.Property(q => q.Phone).IsOptional();
this.Property(q => q.Email).IsOptional();
那么这不符合我的要求。
Q1:我如何对此建模 - 有没有简单的方法,或者我必须使用检查约束?这个检查约束好吗:
ALTER TABLE dbo.[Customer]
ADD CONSTRAINT constraintAtLeastOneContactDetailRequired
CHECK ( ([Phone] IS NOT NULL) OR ([Email] IS NOT NULL) )
--CHECK ( NOT(COALESCE([Phone], [Email]) IS NULL) ) <--or this?
;
Q2:我对这两个字段都有一个 UNIQUE 约束,所以如果我允许它们为空并添加检查约束,我会遇到问题,因为可以有多个空值,根据定义,它们不是唯一的吗?