我在论坛上搜索了很多,但是没有找到关于这个问题的任何内容。
我在EntityFramework Code First中有2个属性:
[Column(TypeName = "Money")]
public decimal? Debit { get; set; }
[Column(TypeName = "Money")]
public decimal? Credit { get; set; }
其中一个不应为null,但另一个应该为null 例子:
Debit=null;
Credit=34;
Debit=45;
Credit=null;
另一方面,不应该将两者都设置为空或者不设置它们。 是否可以使用数据注释处理此问题,还是应该通过解决方法解决它?
祝你好运!
答案 0 :(得分:5)
您总是可以使用约束
在数据库端进行验证ALTER TABLE TableName
ADD CONSTRAINT OneColumnNull CHECK
((Debit IS NULL AND Credit IS NOT NULL) OR
(Debit IS NOT NULL AND Credit IS NULL)
)
完全符合您的要求。您可以将该查询作为其中一个数据库迁移脚本的一部分。
答案 1 :(得分:2)
我不知道如何使用available Code First Data Annotations.
执行此操作您可以覆盖ValidateEntity
类的DbContext
方法,并为该类型的实体添加验证逻辑。
或者您可以为您的属性添加参数验证逻辑。
private decimal? _debit;
[Column(TypeName = "Money")]
public decimal? Debit
{
get { return _debit; }
set
{
// logic to check _credit against value
_debit = value;
}
}
private decimal? _credit;
[Column(TypeName = "Money")]
public decimal? Credit
{
get { return _credit; }
set
{
// logic to check _debit against value
_credit = value;
}
}
答案 2 :(得分:0)
在SQL Server中,数据库字段可以为空或不可为空。您的设计有时需要列为空,这意味着两者都必须是可为空的
替代品包括 使用零而不是null。
或者有一列Amount和另一列IsDebit
您还可以为您的班级编写属性,例如
[NonMapped]
public int? Credit
{ get
{ if ( dataCredit == 0 ) return null; }
}