这是我收到的错误:
消息 =“无法将类型 'App.Models.Subject' 转换为类型 'App.Context.ITenantData'。LINQ to Entities 仅支持转换 EDM 基元或枚举类型。”
为了在我的应用程序中实现多租户,我添加了一个租户表并将每个特定于租户的模型链接到一个租户(包括主题)。
我从这篇文章中得到了很多帮助:DbSet、ModelBuilder 和 EF 导航属性
但现在我被上面的铸造问题困住了。
我的租户上下文:
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; }
}
Subject 使用 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
我究竟做错了什么?
另外 - 我对此很陌生,所以如果我在这里遗漏了任何重要的内容,请告诉我,我会发布。感谢您提供任何帮助。