0

我有一個類Tenant繼承自UserProfile。我使用的table-per-類型繼承,所以我的上下文類看起來是這樣的:使用MVC腳手架存儲庫與繼承類(表類型)不起作用

// 1 DbSet for superclass UserProfile 
public DbSet<LetLord.Models.UserProfile> UserProfile { get; set; } 

我使用存儲庫類我的數據訪問和我創建TenantRepository用下面的軟件包管理器命令:

腳手架控制器租客-repository

當我嘗試運行我的應用程序,在TenantRepository到租客的所有引用拋出下面的錯誤...

'MyNamespace.MyContext'不包含'Tenant'的定義,並且找不到'Tenant'接受第一個參數'MyNamespace.MyContext'的擴展名。

......比如下面的參考:

public IQueryable<Tenant> All 
{ 
    get { return context.Tenant; } // error line here 
} 

當使用表每類型繼承只有DbSet爲基類應該包括在內,所以我明白爲什麼我得到錯誤。

如何在像我這樣的場景中實現派生類的存儲庫?


編輯

使用.Add().Find().Remove()等時,如何在上面實現的呢?如上面對於前面提到的方法描述

同樣的錯誤:

public Tenant Find(int id) 
{ 
    return context.UserProfile.OfType<Tenant>().Find(id); // error at .Find() 
} 

回答

1

試試這個:

public IQueryable<Tenant> All 
{ 
    get { return context.UserProfile.OfType<Tenant>(); } 
} 

這隻會返回租戶。

對於其他的方法,如添加,查找,刪除:

public Tenant Find(int id) 
{ 
    // a few different options here -- assumes your key property is Id 
    return context.UserProfile.OfType<Tenant>().SingleOrDefault(t => t.Id == id); 

    // option 2 
    // even though your context does not expose a DbSet<Tenant>, you can still 
    // use the Set<TResult>() method to get only tenants this way 
    return context.Set<Tenant>().Find(id); 
} 

public void Add(Tenant tenant) 
{ 
    context.Add(tenant); 
} 

public void Remove(Tenant tenant) 
{ 
    context.Set<Tenant>().Remove(tenant); 
} 
+0

謝謝,這工作,但請參閱編輯RE其他庫的方法。 – MattSull 2013-02-27 14:52:01

+0

我不知道這些方法是什麼樣子,但我會給它一個鏡頭。 – Dismissile 2013-02-27 14:54:09

+0

它們是在運行問題中描述的包管理器命令時自動創建的存儲庫類的一部分。 – MattSull 2013-02-27 14:56:52