当一个列值依赖于另一个列值时,实体框架代码第一个约束
本文关键字:实体 框架 约束 第一个 代码 依赖于 一个 另一个 | 更新日期: 2023-09-27 18:05:34
我有以下模型:
class RentOrder
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
我如何在实体框架代码首先添加约束,StartDate
必须始终小于EndDate
?我知道的唯一方法是通过在覆盖的Seed
方法中执行sql命令来添加它。有没有更简单的方法,没有SQL?
现在解决这个问题的唯一方法,正如我在问题中提到的,是在Seed
方法中编写sql命令:
public class MyDatabaseInitializer : DropCreateDatabaseAlways<MyDatabaseContext>
{
protected override void Seed(MyDatabaseContext context)
{
context.Database.ExecuteSqlCommand(@"ALTER TABLE Orders
ADD CONSTRAINT C_Dates CHECK(EndDate > StartDate)");
}
}
并在应用程序开始时调用:
Database.SetInitializer(new MyDatabaseInitializer());
您可以实现set方法,并在结束日期小于开始日期时抛出自定义异常。
您需要在两者中实现它,因为您仍然可以设置相反的内容。下面是一个简单的例子(假设开始日期和结束日期不能是同一天):
class RentOrder
{
public DateTime StartDate
{
get { return _startDate };
set
{
if (value >= _endDate)
throw new Exception("Start Date cannot be greater than End Date");
_startDate = value;
};
}
private DateTime _startDate;
public DateTime EndDate
{
get { return _endDate};
set
{
if (value <= _startDate)
throw new Exception("End Date cannot be less than Start Date");
_endDate = value;
};
}
private DateTime _endDate;
}