這是我收到的錯誤:LINQ到實體鑄造的問題 - 無法施展對象泛型類型
Message = "Unable to cast the type 'App.Models.Subject' to type 'App.Context.ITenantData'. LINQ to Entities only supports casting EDM primitive or enumeration types."
在試圖實現我的應用程序的多租戶,我添加了一個租戶表將每個特定於租戶的模型與租戶(包括主題)相關聯。
我得到了很多的幫助,從這個帖子:DbSet, ModelBuilder, and EF Navigation Properties
但現在我堅持了上述鑄造的問題。
我TenantContext:
public class TenantContext : DbContext {
private readonly RealContext _realContext;
private readonly Tenant _tenant;
public TenantContext(Tenant tenant)
: base("name=DefaultConnection") {
this._tenant = tenant;
this._realContext = new RealContext();
}
// _realContext.Subjects is a DbSet
public IQueryable<Subject> Subjects { get { return FilterTenant(_realContext.Subjects); } }
private IQueryable<T> FilterTenant<T>(IQueryable<T> values) where T : ITenantData
{
return values.Where(x => x.TenantId == _tenant.TenantId);
}
}
隨着ITenantData:
public interface ITenantData {
int TenantId { get; set; }
}
與學科有TenantId屬性實現ITenantData:
[ForeignKey("Tenant")]
public int TenantId { get; set; }
現在,當我查詢使用TenantContext,我得到上面的錯誤:
using (var db = CreateContext()) { // returns tenantContext
var dbSubjects = db.Subjects;
var subjects = dbSubjects.ToList(); // error occurs here
我在做什麼錯?
另外 - 我很新,所以如果我錯過了關鍵的任何東西,讓我知道,我會張貼。感謝您提供任何幫助。
好的,現在就讓我自己的樣子吧。 – LINQ2Vodka
This Works:private IQueryable FilterTenant(IQueryable values) { return values.Where(x => x.TenantId == _tenant.TenantId); } 它解決了這個問題嗎? –
LINQ2Vodka