Entity Framework Code Первое ограничение, когда одно значение столбца зависит от другого - PullRequest
4 голосов
/ 16 августа 2011

У меня есть следующая модель:

class RentOrder
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

Как добавить ограничение в код Entity Framework Во-первых, что StartDate всегда должно быть меньше EndDate?Единственный известный мне способ - добавить его, выполнив команду SQL в переопределенном методе Seed.Есть ли более простой способ без SQL?

Ответы [ 3 ]

3 голосов
/ 18 августа 2011

Единственный способ решить эту проблему сейчас, как я уже упоминал, - это написать SQL-команды в методе Seed:

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());
0 голосов
/ 16 августа 2011

Вам нужно будет реализовать это в обоих случаях, потому что вы все равно сможете установить обратное. Вот краткий пример (при условии, что начальная и конечная даты не могут совпадать):

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;
}
0 голосов
/ 16 августа 2011

Вы можете реализовать метод set и создать пользовательское исключение, если конечная дата меньше начальной даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...