2013-03-22 64 views
0

我有一个简单的零继承应用程序(至少就数据库而言)。我怎么能“告诉”这个实体框架,以便它会停止寻找Discriminator列?使实体框架忽略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; } 
} 
+0

你能告诉我们你更改数据的代码吗? – 2013-03-22 17:35:13

回答

0

EF只会寻找鉴别列,如果你在一个TPH的DbContext类的你DbContext.An例如使用每个层次结构的继承表是这样的:

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; } 
} 

你必须放弃这种模式。

+0

我没有使用该模式,请参阅我添加的代码。我能看到的唯一的“继承”是IEntity的实现,但这真的是原因吗? – 2013-03-22 17:48:30

+0

那么,它甚至不是继承你所使用的,你只是在模型类上实现一个接口。我从来没有这样做的需要,而且我不了解层次结构中的EF内部结构。如果从类声明中移除接口并运行代码会发生什么? – 2013-03-22 17:58:33

+0

没有任何变化,我得到相同的错误。 – 2013-03-22 18:04:07