2013-07-08 31 views
1

我有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

enter image description here

EventCounts總是0與實體框架映射,

,但如果我映射模型有不同EventsCount型號,那麼它被映射。

喜歡:

public partial class Category 
    { 
     public Category() 
     { 

     }  
     public int CategoryId { get; set; } 
     public string Name { get; set; } 
     public int EventsCount { get; set; } 
    } 

現在被映射所有列,,這裏的任何想法,在未映局部模型爲什麼實體框架?

回答

2

我還沒有得到確切的答案, 但我通過繼承模型得到了解決方案,而不是使用部分類。 與反射和反射幫助的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是存在的。

我不知道,但它可能對某人有所幫助。

+0

我已將此標記爲答案,因爲這解決了我的問題,但尚未解決問題。如果有人有很好的想法,我會在未來將其他標記爲答案。 –

0

就我的解釋而言,你試圖綁定更多的數據,然後它就在班上。您可以只綁定事件計數,而不是嘗試使用select查詢綁定c2.CategoryId,c2.Name。 我不知道,但我認爲這應該工作。

+1

有點不同意你的答案,似乎在生成的模型中添加一個Property。據我所知,你說我們可以使用Count/Count()道具/方法四計數嗎?我們不應該在這種情況下使用它,因爲它會獲取所有不必要的數據。請檢查Intellitrace是否有想法,並在ManagementStudio上單獨運行該查詢,Count prop會生成非常不必要的數據。這是原因,我只提取EventCounts,而不是所有事件和計數。 –