EF Code First “Invalid column name ‘Discriminator'” but no inheritance

Turns out that Entity Framework will assume that any class that inherits from a POCO class that is mapped to a table on the database requires a Discriminator column, even if the derived class will not be saved to the DB.

The solution is quite simple and you just need to add [NotMapped] as an attribute of the derived class.

Example:

class Person
{
    public string Name { get; set; }
}

[NotMapped]
class PersonViewModel : Person
{
    public bool UpdateProfile { get; set; }
}

Now, even if you map the Person class to the Person table on the database, a “Discriminator” column will not be created because the derived class has [NotMapped].

As an additional tip, you can use [NotMapped] to properties you don’t want to map to a field on the DB.

Leave a Comment