LINQ to Entities Casting Issues - 无法将对象转换为Generic类型 [英] LINQ to Entities Casting Issues - Unable to cast object to Generic type
问题描述
这是我收到的错误:
Message =无法将类型App.Models.Subject键入
'App.Context.ITenantData'。LINQ to Entities仅支持投射EDM
原始或枚举类型。
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."
为了在我的应用程序中实施多租户,我添加了一个租户表,并将每个特定于租户的模型链接到租户(包括主题)。
In an attempt to implement multi-tenancy in my application, I added a Tenants table and linked every tenant-specific model to a Tenant (including Subjects).
我从这篇文章中得到很多帮助: DbSet,ModelBuilder和EF导航属性
I got a lot of help from this post: DbSet, ModelBuilder, and EF Navigation Properties
但是现在我被困在上面的铸造问题上。
But now I'm stuck with the above casting issue.
我的TenantContext:
My 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:
With ITenantData:
public interface ITenantData {
int TenantId { get; set; }
}
主题用TenantId属性实现ITenantData:
And Subject implements ITenantData with a TenantId property:
[ForeignKey("Tenant")]
public int TenantId { get; set; }
现在,当我使用TenantContext查询时,我得到以上错误:
Now, when I query using TenantContext, I get the above error:
using (var db = CreateContext()) { // returns tenantContext
var dbSubjects = db.Subjects;
var subjects = dbSubjects.ToList(); // error occurs here
我做错了什么?
另外 - 我很新,所以如果我在这里缺少任何关键的东西,让我知道,我会发布。感谢您提供的任何帮助。
Also - I'm pretty new to this, so if I'm missing anything critical here, let me know and I'll post up. Thank you for any help you can provide.
推荐答案
更新我的TenantContext以包含 class
解决了问题,但我不知道为什么:
Updating my TenantContext to include class
fixed the problem, but I don't know why:
private IQueryable<T> FilterTenant<T>(IQueryable<T> values) where T : class, ITenantData
{
return values.Where(x => x.TenantId == _tenant.TenantId);
}
如果有人想写出关于这个背后的推理的一切,我会很乐意接受你的回答。
If anyone wants to write up anything about the reasoning behind this, I'll gladly accept your answer.
这篇关于LINQ to Entities Casting Issues - 无法将对象转换为Generic类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!