2016-04-14 60 views
0

我有以下型號:如何使用存儲過程填充模型,如何在EF中填充參考對象?

public partial class Names 
{ 
    public int ID { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string FirstName { get; set; } 

    public int LastNameRef { get; set; } 

    public virtual LastNameModel LastName { get; set; } 
} 

而且我在SQL存儲的過程,做了以下內容:

select id, FirstName, LastNameRef from Names 

現在,我通過以下操作調用C#的存儲過程:

var ret = this.Database.SqlQuery<Names>("dbo.RetrieveFirstNames").ToList(); 

上述問題是,LastNameModel對象從未正確填充並返回爲空。有沒有辦法使用EF自動執行此操作?

我之前做的是手動更新它,然後通過收集並查找具有「LastNameRef」引用鍵的正確對象LastNameModel

+0

你可以看看你的存儲過程返回多個結果集。 https://msdn.microsoft.com/en-us/data/jj691402?f=255&MSPPError=-2147217396 –

回答

1

由於您已將virtual關鍵字添加到LastName,所以此屬性將被延遲加載 - 即在代碼中引用之前不會填充,因此會調用另一個RPC調用來獲取相關數據。

您的模型需要複製存儲過程將返回的內容,因此需要構建一個扁平結構。如果您需要LastNameModel的詳細信息,那麼您將不得不在您的模型和存儲過程SELECT中包含其列。

+0

對不起。當我把它粘貼在這裏時,我必須更改模型名稱並忘記它。但所有的名字都是正確的。 – SamIAm

+0

我已刪除答案的相關部分。但是,我的其餘評論是正確的:如果您想按原樣填充模型,您必須讓EF通過使用LINQ to Entities生成SQL查詢。即'dbContext.Names.Include(n => n.LastName).ToList()'。通過存儲過程,EF不能映射返回到特定表的列,從而填充當前擁有的模型。 – strickt01