LINQ到实体铸造的问题 - 无法施展对象泛型类型 [英] LINQ to Entities Casting Issues - Unable to cast object to Generic type
问题描述
这是我收到的错误:
消息=无法转换类型'App.Models.Subject到类型
App.Context.ITenantData。 LINQ到实体仅支持铸造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).
我得到了很多,从这个帖子的帮助:<一href=\"http://stackoverflow.com/questions/19758080/dbset-modelbuilder-and-ef-navigation-properties/19759042#comment29397086_19759042\">DbSet,模型构建器和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; }
}
和主题实现ITenantData与TenantId属性:
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
我是什么做错了吗?
What am I doing wrong?
此外 - 我是pretty新本,所以如果我在这里错过什么重要的,让我知道,我会张贴。感谢您的帮助,您可以提供。
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包括类
解决了问题,但我不知道为什么:
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到实体铸造的问题 - 无法施展对象泛型类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!