Linq to Entity-执行存储过程

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关联的,对它进行任何操作都会执行数据库操作从而修改数据库的数据。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值