Проблема EntityFramework с IsDiscriminator в наследовании одной таблицы - PullRequest
1 голос
/ 29 июня 2011

У меня есть 2 простых класса:

public abstract class Device
{
    public int DeviceID { get; set; }

    public string SerialNumber { get; set; }

    [Column(IsDiscriminator = true)]
    public int DeviceTypeID { get; set; }
}

public class SomeDevice : Device
{
    public string SomeAdditionalInfo { get; set; }
}

Все хранится в одной таблице:

DeviceID |SerialNumber |DeviceTypeID |SomeAdditionalInfo

Но в приложении у меня есть следующее исключение при получении данных:

Invalid column name 'Discriminator'.

Если я изменю столбец DeviceTypeID на Discriminator, тогда все будет работать нормально.Почему атрибут IsDiscriminator = true игнорируется?

1 Ответ

1 голос
/ 29 июня 2011

Вы используете Column атрибут из неправильного пространства имен - это атрибут для Linq-to-Sql.Дискриминатор в каркасе сущностей никогда не отображается как свойство - EF создаст этот столбец автоматически.Поэтому, если вы не используете существующую базу данных, вы должны просто использовать:

public abstract class Device
{
    public int DeviceID { get; set; }
    public string SerialNumber { get; set; }
}

В случае существующей базы данных вы должны использовать свободный API.В вашем производном контексте добавьте это к OnModelCreating:

modelBuilder.Entity<Device>()
            .Map<SomeDevice>(m => m.Requires("DeviceTypeID")
                                   .HasValue(10));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...