2013-01-10 67 views
1

我正在用設計器(VS2012)創建一個EF5實體模型,並使用EF5 DbContext生成器作爲代碼生成項目。EF5模型 - 首先,DBContext代碼生成和派生類

我的模型包含從另一個(而不是抽象)派生的實體。

假設基礎實體被稱爲BaseEntity,派生實體是DerivedEntity。

現在我看到在生成的上下文類,沒有

Public DbSet<DerivedEntity> DerivedEntities { get; set; } 
定義

只有

Public DbSet<BaseEntity> BaseEntities { get; set; } 

定義。

這是正常的嗎?如果是的話,我該如何查詢linq中的派生實體?

我已經習慣了這樣的查詢:

using(var ctx = new EntityContainer) 
{ 
var q = from e in ctx.DerivedEntities <-- but this is now not possible since it doesn't exist 
select e; 

return q.ToList(); 
} 

感謝回答。

編輯:

按照要求,生成的類貼:

Entity Model Designer diagram (subset)

public partial class Scheduling 
    { 
     public int Id { get; set; } 
     public string Subject { get; set; } 
     public System.DateTime BeginDate { get; set; } 
     public System.DateTime EndDate { get; set; } 
    } 

public partial class TeamScheduling : Scheduling 
    { 
     public int TeamId { get; set; } 
     public Nullable<int> AssignmentId { get; set; } 

     public virtual Team Team { get; set; } 
     public virtual Assignment Assignment { get; set; } 
    } 


public partial class EntityContainer : DbContext 
    { 
     public EntityContainer() 
      : base("name=EntityContainer") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 

     public DbSet<Team> Teams { get; set; } 
     public DbSet<Location> Locations { get; set; } 
     public DbSet<Country> Countries { get; set; } 
     public DbSet<Assignment> Assignments { get; set; } 
     public DbSet<ProductType> ProductTypes { get; set; } 
     public DbSet<AssignmentPreference> AssignmentPreferences { get; set; } 
     public DbSet<Scheduling> Schedulings { get; set; } 
    } 

正如你看到的,和EntityContainer類不包含

public DbSet<TeamScheduling> TeamSchedulings { get; set; } 
+1

你能告訴例子嗎? – bUKaneer

+0

也許你可以將你的模型圖保存爲圖像並將其發佈到你的問題中。 –

+0

更多信息增加 – tjeuten

回答

2

這是預期w如果你使用繼承方式,你有。 context.Schedulings包含對象Scheduling和對象TeamScheduling。只有通過詢問context.Schedulings.OfType<TeamScheduling>()才能獲得TeamScheduling對象。請注意,您無法有效使用context.Schedulings.OfType<Scheduling>()來獲取其他人:這也將包括TeamScheduling對象。

您可以選擇嘗試context.Set<TeamScheduling>(),但我不完全確定它會起作用。

+0

謝謝,這就是我一直在尋找! – tjeuten

2

如果您的意圖是讓兩個表出現,請說一個父級調度實體以及具有返回到調度實體的外鍵的子TeamScheduling實體,請考慮使用每類表(TPT)映射如討論here

從本質上說,你應該修改「OnModelCreating」的方法有以下代碼:

modelBuilder.Entity<TeamScheduling>().ToTable("TeamScheduling"); 

這明確地告訴你想有被表示爲自己的表TeamScheduling子EF。通過LINQ查詢這將是簡單的,你將能夠做到像下面這樣:你的模型類請

var teamScheds = context.Set<TeamScheduling>().Where(s => s.Id == 1).FirstOrDefault(); 
+0

太好了,謝謝 – tjeuten

相關問題