我有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; }
}
现在有映射所有列,这里有任何想法,为什么实体框架在不映射部分模型?
我没有得到确切的答案,但我通过继承模型而不是制作部分类来获得解决方案。由于EntityFramework mapp数据在反射和反射的帮助下无法处理属性与部分类
检查这个.NET reflection: how to get properties defined on partial class
所以我所做的是:首先创建另一个继承EF生成的类的类,然后添加我们想要的属性。
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
在那里。
我不知道,但它可能对某人有帮助。
就我的解释而言,你试图绑定更多的数据,然后它就在课堂上。您只能绑定事件计数,而不是尝试使用select查询绑定c2.CategoryId,c2.Name。我不确定,但我认为这应该有效。
我遇到了同样的问题。这似乎是EF中的一个错误。对我来说,解决方案是优秀的Dapper库。它只是一堆扩展方法,所以它可以与EF并排工作。