2013-03-22 96 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