實體框架核心存儲過程

entity-framework-core stored-procedures

我正在使用EF Core(代碼優先),並希望從存儲過程中獲取數據。返回的結果應該是我根據結果返回定義的類。

如果返回類型是實體之一,我可以使它工作。恩。

_context.Set<Entity>().FromSql("dbo.Stored_Proc").ToList(); 

但如果我的返回值不是上下文中的實體,則不會。

任何幫助,將不勝感激。

熱門答案

這很簡單。

這有3個步驟:

  1. 創建具有SP返回的相同屬性的模型類,例如

    public class SPModel
    {
      public int Id {get;set;}
      public DateTime? CreatedDateTime {get;set;}
      etc..
    }

  1. 將此模型類插入dbContext類,如:

    public class YourDbContext: DbContext
    {
       public virtual DbSet<SPModel> YourDbSet { get; set; }
       ....
    }

不要將此類映射到任何sql表

  1. 用它來調用SP,如:
 
    var collection = await dbContext.YourDbSet.FromSql("EXECUTE yourStoredProcedure {0},{1}", param1, param2).ToListAsync();

一些有用的東西:
- 您可以使用try / catch塊來查看是否遺漏了某些屬性
- 您可以擴展模型類以添加新屬性,但避免使用“set”訪問器:public bool IsLoaded {get;}
- 如果你的SP返回一些可以為空的類型,請小心,在這種情況下,模型也必須具有可空類型



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因