使实体框架忽略Discriminator列

时间:2013-03-22 17:24:04

标签: .net database entity-framework orm

我有一个简单的应用程序,没有继承(至少就数据库而言)。我怎样才能“告诉”这个实体框架,以便它停止寻找Discriminator列?

我没有权限更改数据库表的结构,但是我需要更改数据,我不能这样做,因为EF一直试图对不存在的Discriminator列进行操作并因此而崩溃。

修改:添加了代码

public class DatabaseContext : DbContext {
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Entity<User>().ToTable("Users");
    }
}


public class UserRepository {
    public int Insert(User entity) {
        using (var db = new DatabaseContext()) {
            var table = db.Users;
            table.Add(entity);
            return db.SaveChanges();
        }
    }
}

public class User : IEntity {
    public int Id { get; set; }

    public String Username { get; set; }

    public String Password { get; set; }

    public String FullName { get; set; }

    public String Email { get; set; }
}

public interface IEntity {
    int Id { get; set; }
}

1 个答案:

答案 0 :(得分:0)

如果在DbContext上使用每个层次结构表继承,EF将只查找Discriminator列。一个TPH DbContext类的示例是:

public abstract class Animal 
{
    public int AnimalId { get; set; }
    public string Name { get; set; }        
}

public class Cat : Animal
{
    public string Race { get; set; }
}

public class Dog : Animal
{
    public string BarkStyle { get; set; }
}

public class InheritanceMappingContext : DbContext
{
    public DbSet<Animal> Animal { get; set; }
}

你必须放弃这种模式。