2016-06-10 68 views
0

祝您有美好的一天。我從SQL存儲過程返回前面的結果。將SQL數據綁定到實體框架中的模型屬性

enter image description here

現在如下我綁定的數據。

List<EventPhotos> resList = null; 
resList = pe.Database.SqlQuery<EventPhotos>(sqlQuery, param).ToList(); 

以下是我的模型。

public partial class EventPhotos 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public EventPhotos() 
     { 

     }   

     public EventInfo EventInformation { get; set; } 
     public ImageInfo ImageInformation { get; set; } 

    } 

    public class EventInfo 
    { 
     public string EventID { get; set; } 

     public string EventName { get; set; } 

     public bool IsJoint { get; set; } 
    } 
    public class ImageInfo 
    { 
     public string ImageID { get; set; } 

     public string EventMediaFolder { get; set; } 

     public string Image { get; set; } 

     public string DateTime { get; set; } 

     public string ImageDescription { get; set; } 

     public string Action { get; set; } 
    } 

但是當我運行這個,沒有什麼被映射到我的屬性EventInformation和ImageInformation。無論如何要實現這一點。我知道如果我們使用dataAdapter併爲檢索到的每個表分配名稱,就可以做到這一點。但我想使用實體框架。任何幫助表示讚賞。提前致謝。

+0

請參閱http://stackoverflow.com/a/4874600/2224701 –

+0

嗨,感謝您的回覆。但是這是爲了提供參數。在我的情況下,數據都很好。如果我正在使用具有屬性的單個類,我正在獲取數據。現在的問題是,當我分成兩個單獨的類的屬性,它不會自動映射。 –

+0

爲什麼使用原始SQL查詢而不是linq? –

回答

0

嘗試並添加表和列屬性

public class EventInfo 
{ 

    [Column(Name = "EventID")] 
    public string EventID { get; set; } 


    [Column(Name = "EventName")] 
    public string EventName { get; set; } 


    [Column(Name = "IsJoint")] 
    public bool IsJoint { get; set; } 
} 
public class ImageInfo 
{ 

    [Column(Name = "ImageID")] 
    public string ImageID { get; set; } 


    [Column(Name = "EventMediaFolder")] 
    public string EventMediaFolder { get; set; } 


    [Column(Name = "Image")] 
    public string Image { get; set; } 


    [Column(Name = "DateTime")] 
    public string DateTime { get; set; } 


    [Column(Name = "ImageDescription")] 
    public string ImageDescription { get; set; } 


    [Column(Name = "Action")] 
    public string Action { get; set; } 
} 

我用下面的代碼進行映射

returnItems = context.ExecuteQuery<EventPhotos>(sql).ToList(); 
+0

當我嘗試這個時,我得到一個錯誤,因爲Name不是一個有效的命名屬性。任何想法如何解決這個問題?在此先感謝 –

+0

@VojtěchDohnal,真的回答了你的問題。 屬性中的列名和表名都需要與SQL查詢列名匹配。 –

+0

我正在使用選擇查詢中的屬性名稱。當我用所有財產的單一類時,它正在工作。 –

0

Database.SqlQuery

創建一個原始的SQL查詢,將返回給定類型的元素。 該類型可以是任何類型,其屬性與查詢返回的列名稱匹配的名稱爲 ,或者可以是簡單基元 類型。該類型不一定是實體類型。即使返回的對象類型 是實體類型,該上下文也不會跟蹤此 查詢的結果。

這意味着,存儲過程的結果集的列名必須與您的POCO類EventPhotos中定義的屬性的名稱匹配。因此,您必須使用返回列的確切名稱創建類EventPhotos,而不是添加兩個屬性 - Database.SqlQuery方法找不到嵌套的屬性名稱。

SqlQuery不支持複雜類型。

See a similar question here