簡體   English   中英

Entity Framework Core 3 - 帶有來自存儲過程的一些字段的模型

[英]Entity Framework Core 3 - model with some fields from a stored procedure

在 EF Core 3 中,我有一個模型,其中只從舊存儲過程中檢索模型的幾個字段。 存儲過程中內置了大約 300 行業務邏輯,因此由於測試工作,我們並不熱衷於將邏輯移出存儲過程。

在 get 中執行存儲過程似乎不是這里的正確方法(它會導致InvalidOperation異常)。 將存儲過程中的列鏈接到現有模型的正確方法是什么?

我想到的唯一另一種方法可能是在頁面的加載屬性中填充這些字段; 但也許還有另一種我想念的更好的方式。 :)

// This is my existing display model
internal partial class MyExistingModel
{
    [Key]
    public int id{ get; set; }
    public int R_Id { get; set; }
    public string G_Number { get; set; }

    public virtual P1 ParentRuns { get; set; }
    public virtual ICollection<P1> AnotherOne { get; set; }
}

這是為每個MyExistingModel.id調用的存儲過程標頭:

get_ComplicatedLogicStuff(@in_id)
AS
    SELECT 
        column1, column2, column3, column4
    ... 
    WHERE
        table1.id = @in_id;

謝謝!

我將創建一個 ModelService 類來為您加載模型,而不是將該邏輯放在頁面中。 然后您可以專門選擇如何加載您的導航屬性。 這是您可以使用的方法。

internal class MyExistingModelService 
{
    public IEnumerable<MyExistingModel> List () 
    {
        using ( var context = new YourDataContextHere() ) {
            return context.MyExistingData
                .Select ( myExistingData => new MyExistingModel () {
                    Id = myExistingData.Id,
                    R_Id = myExistingData.R_Id,
                    AnotherOne = context.YourStoredProcedure().Where( (entity) => SomeFilter)   
                });
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM