我有以下型号:
class RentOrder
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
如何在实体框架代码中添加约束,StartDate
必须始终小于EndDate
?我知道的唯一方法是通过在重写的Seed
方法中执行SQL命令来添加它。没有SQL会有更简单的方法吗?
答案 0 :(得分:3)
正如我刚才提到的,现在解决这个问题的唯一方法是用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());
答案 1 :(得分:0)
如果enddate小于开始日期,您可以实现set方法并抛出自定义异常。
答案 2 :(得分:0)
你需要在两者中实现它,因为你仍然可以设置相反的结果。这是一个简单的例子(假设开始和结束日期不能是同一天):
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;
}