Entity Framework код первого TPH, где дискриминатор больше 0 - PullRequest
2 голосов
/ 01 марта 2011

Я определяю модель в EF4 CTP5, где мне нужно отобразить унаследованную сущность, только когда значение идентификатора больше 0. Код выглядит следующим образом.

public class Parent
{
   public int ID { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

public class Child : Parent
{
   public int SchoolID { get; set; }
}

В методе OnModelCreating...

modelBuilder.Entity<Parent>().Map<Child>(
            reg => 
                {
                reg.MapInheritedProperties();
                reg.Requires("SchoolID").HasValue((int)<value greater than 0); <== Pseudo code
            }).ToTable("Users");

Возможны ли такие вещи?Если нет, то можно ли вообще игнорировать дискриминатор?

1 Ответ

1 голос
/ 01 марта 2011

Не уверен насчет части «возможно ли», но пахнет немного.Я имею в виду, это подразумевает значение в ваших данных, где действительно не должно быть значения;Вы столкнетесь с проблемами долговременного обслуживания.Дискриминатор предназначен не только для того, чтобы помочь ORM выяснить, какая запись какого типа, он также должен быть (imo) логическим описанием типа, с которым вы имеете дело, когда люди запускают SQL-запросы к БД.Это также может быть использовано, чтобы помочь с разделением индекса.Я понимаю, что TPH в любом случае немного денормализуется, но вы все равно хотите иметь возможность создавать хорошо проиндексированные БД с теми, кто там есть.

Я бы предложил просто позволить EF сделать для вас дискриминатор на основеимя типа, которое по умолчанию является iirc.

...