如何在我的类中映射我的存储过程结果

问题描述 投票:0回答:1

我在 SQL Server 中有 3 个表。第一个用于订单,第二个用于订单行项目,第三个用于订单日志。

这是我的数据库图:

文字

这是我的 SQL Server 存储过程查询:

SELECT 
    table1.ID AS OrderID,
    table1.Account,
    table1.OrderNumber,
    table2.OrderID AS OrderLineItemID,
    table2.ID, table2.Price,
    orderlog.ID AS OrderLogID,
    orderlog.OrderLog
FROM 
    [dbo].[Order] AS table1
LEFT JOIN 
    OrderLineItems AS table2 ON table1.ID = table2.OrderID
LEFT JOIN 
    [dbo].[OrderLog] AS orderlog ON table1.ID = orderlog.OrderID 
WHERE
    table1.ID = @orderID

下面附上存储过程每次执行结果的图片。

文字

这是我的

OrderView
课程:

public class OrderView
{
    public int ID { get; set; }
    public string OrderNumber { get; set; }
    public string Account { get; set; }
    public  List<OrderLineItem> OrderLineItems { get; set; }
    public  List<OrderLog> OrderLogs { get; set; }
}

我怎样才能做到这一点,以便每当它调用存储过程来获取记录时,它都会映射到我的类而不使用循环?我在 ASP.NET MVC 5 中使用实体框架和数据库优先方法。

c# sql-server asp.net-mvc entity-framework
1个回答
0
投票

我认为你可以使用

MapToStoredProcedures()
,例如:

public class OrderView
{
    public int ID { get; set; }
    public string OrderNumber { get; set; }
    public string Account { get; set; }
    public List<OrderLineItem> OrderLineItems { get; set; }
    public List<OrderLog> OrderLogs { get; set; }
}

public class OrderLineItem
{
    public int ID { get; set; }
    public int OrderID { get; set; }
    public decimal Price { get; set; }
}

public class OrderLog
{
    public int ID { get; set; }
    public int OrderID { get; set; }
    public string OrderLog { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<OrderView> OrderViews { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<OrderView>().MapToStoredProcedures();
        base.OnModelCreating(modelBuilder);
    }
}

或者你可以使用

Database.SqlQuery<T>

public IEnumerable<OrderView> GetOrderView(int orderID)
{
    var parameters = new SqlParameter[] {
        new SqlParameter("@orderID", orderID)
    };
    
    var result = this.Database.SqlQuery<OrderView>(
        "EXEC dbo.MyStoredProcedure @orderID",
        parameters);
    
    return result.ToList();
}

© www.soinside.com 2019 - 2024. All rights reserved.