我有ADO实体数据模型生成的模型,如:
public partial class Category
{
public Category()
{
}
public int CategoryId { get; set; }
public string Name { get; set; }
}
现在我添加了一个属性
public partial class Category
{
public int EventsCount { get; set; }
}
现在我试图通过以下方式映射://这是有效的查询
List<Category> retVal = db.Database.SqlQuery<Category>(
//retVal = db.Categories.SqlQuery(
@"SELECT c2.CategoryId,c2.Name,c1.EventsCount AS EventsCount FROM (
SELECT c.CategoryId, COUNT(c.CategoryId) AS EventsCount FROM Category c
JOIN EventCategory ec ON ec.CategoryId = c.CategoryId
JOIN (SELECT * FROM EVENT WHERE EventDateTime > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))) e ON e.EventId = ec.EventId
WHERE c.ImportedFrom IS NULL
GROUP BY c.CategoryId) c1
join Category c2 ON c1.CategoryId = c2.CategoryId").ToList();
实际数据我在Management Studio上执行原始SQL
但EventCounts
始终是0
,带有实体框架映射,
但是如果我使用具有EventsCount
的不同模型映射模型,则将其映射。
像:
public partial class Category
{
public Category()
{
}
public int CategoryId { get; set; }
public string Name { get; set; }
public int EventsCount { get; set; }
}
现在有映射所有列,这里有任何想法,为什么实体框架在不映射部分模型?
答案 0 :(得分:2)
我没有得到确切答案, 但我通过继承模型而不是制作部分类来获得解决方案。 由于反射和反射的帮助,EntityFramework mapp数据无法处理具有部分类的属性
检查一下 .NET reflection: how to get properties defined on partial class
所以我做的是: 首先使用EF生成的继承类创建anther类,并添加我们想要的属性。
public partial class CategoryEx:Category
{
public int EventsCount { get; set; }
}
当然,
List<CategoryEx> retVal = db.Database.SqlQuery<Category>(
//retVal = db.Categories.SqlQuery(
@"SELECT c2.CategoryId,c2.Name,c1.EventsCount AS EventsCount FROM (
SELECT c.CategoryId, COUNT(c.CategoryId) AS EventsCount FROM Category c
JOIN EventCategory ec ON ec.CategoryId = c.CategoryId
JOIN (SELECT * FROM EVENT WHERE EventDateTime > DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))) e ON e.EventId = ec.EventId
WHERE c.ImportedFrom IS NULL
GROUP BY c.CategoryId) c1
join Category c2 ON c1.CategoryId = c2.CategoryId").ToList();
现在EventsCount
就在那里。
我不知道,但它可能对某人有帮助。
答案 1 :(得分:0)
就我的解释而言,你正在尝试绑定更多数据,然后它就在课堂上。您只能绑定事件计数,而不是尝试使用select查询绑定c2.CategoryId,c2.Name。 我不确定,但我认为这应该有用。
答案 2 :(得分:0)
我遇到了同样的问题。这似乎是EF中的错误。对我来说,解决方案是出色的Dapper库。这只是一堆扩展方法,因此它可以与EF并存。