Linq to Entity-执行存储过程

EntityframeWork 专栏收录该内容
1 篇文章 0 订阅

1.在model中创建存储过程Model,将存储过程与实体进行映射,名称为存储过程名_Result:其中的属性是存储过程的返回值

create procedure "Ten Most Expensive Products" AS  
SET ROWCOUNT 10
SELECT Products.ProductName AS TenMostExpensiveProducts, Products.UnitPrice  
FROM Products  
ORDER BY Products.UnitPrice DESC  

    public partial class Ten_Most_Expensive_Products_Result
    {
        public string TenMostExpensiveProducts { get; set; }
        public Nullable<decimal> UnitPrice { get; set; }
    }
2.在DbContext子类中创建执行方法:传递存储过程名:Ten_Most_Expensive_Products

       public virtual ObjectResult<Ten_Most_Expensive_Products_Result> Ten_Most_Expensive_Products()
        {
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Ten_Most_Expensive_Products_Result>("Ten_Most_Expensive_Products");
        }
3.测试执行存储过程:

        static void TestProc()
        {
            using (NorthwindEntities NWEntities = new TestLINQToEntitiesApp.NorthwindEntities())
            {
                IEnumerable<Ten_Most_Expensive_Products_Result> tenProducts = from p in
                                  NWEntities.Ten_Most_Expensive_Products()
                                  select p;
                foreach (Ten_Most_Expensive_Products_Result p in tenProducts)
                {
                    Console.WriteLine("Product Name: {0}, Price: {1}", p.TenMostExpensiveProducts, p.UnitPrice);
                }
            }

           
        }
4.如果存储过程返回的实体在model中已经存在了,则可以不用新建一个model, 直接利用原来的Model, 并直接在Dbcontext子类中创建执行方法:

Create PROCEDURE [dbo].[GetProduct]   
(   @ProductID int   ) AS   
SET NOCOUNT ON   
Select * from Products where ProductID = @ProductID 

       public virtual ObjectResult<Product> GetProduct(Nullable<int> productID)
        {
            var productIDParameter = productID.HasValue ?
                new ObjectParameter("ProductID", productID) :
                new ObjectParameter("ProductID", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Product>("GetProduct", productIDParameter);
        }
Product getProduct = NWEntities.GetProduct(1).FirstOrDefault();
此时 由GetProduct得到的product是与Dbcontext关联的,对它进行任何操作都会执行数据库操作从而修改数据库的数据。




  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏作者

@朱较瘦

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值