首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CSharp: donet 7 Stored procedure mapping with Entity Framework core 7

CSharp: donet 7 Stored procedure mapping with Entity Framework core 7

作者头像
geovindu
发布2026-06-19 09:43:41
发布2026-06-19 09:43:41
760
举报

sql:

代码语言:javascript
复制
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].People') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE People
GO
CREATE TABLE People
(
    Id Int IDENTITY(1,1) Primary Key,
    [Name] nvarchar(50),
    Name_Original [nvarchar](100)
)
go
 
 
select * from People
go
 
 
---存储过程映射
drop PROCEDURE [dbo].[People_Insert]
go
 
CREATE PROCEDURE [dbo].[People_Insert]
    @Name [nvarchar](max),
    @Name_Original [nvarchar](max)
AS
BEGIN
      INSERT INTO [People] ([Name],Name_Original)
      OUTPUT INSERTED.[Id]
      VALUES (@Name,@Name_Original);
END
go
 
drop PROCEDURE [dbo].[People_Update]
go
CREATE PROCEDURE [dbo].[People_Update]
    @Id [int],
    @Name_Original [nvarchar](max),
    @Name [nvarchar](max)
AS
BEGIN
    UPDATE [People] SET [Name] = @Name,Name_Original = @Name_Original
    WHERE [Id] = @Id --AND [Name_Original] = @Name_Original
    SELECT @@ROWCOUNT
END
go
 
drop PROCEDURE [dbo].[People_Delete]
go
CREATE PROCEDURE [dbo].[People_Delete]
    @Id [int]
    --@Name_Original [nvarchar](max)
AS
BEGIN
    DELETE FROM [People]
    OUTPUT 1
    WHERE [Id] = @Id --AND [Name_Original] = @Name_Original;
END

C#

代码语言:javascript
复制
 // EF core 6.0  存储过程映射
    //modelBuilder.Entity<Student>()
    //     .MapToStoredProcedures(p => p.Insert(sp => sp.HasName("sp_InsertStudent").Parameter(pm => pm.StudentName, "name").Result(rs => rs.StudentId, "Id"))
    //    .Update(sp => sp.HasName("sp_UpdateStudent").Parameter(pm => pm.StudentName, "name"))
    //    .Delete(sp => sp.HasName("sp_DeleteStudent").Parameter(pm => pm.StudentId, "Id"))
    //  );
 
 
    // EF core 7.0 存储过程映射
    //modelBuilder.Entity<DuProduct>()
    //.InsertUsingStoredProcedure(
    //    "DuProduct_Insert",
    //    storedProcedureBuilder =>
    //    {
    //        storedProcedureBuilder.HasParameter(duproduct => duproduct.Name);
    //        storedProcedureBuilder.HasResultColumn(duproduct => duproduct.Id);
    //        storedProcedureBuilder.HasParameter(duproduct => duproduct.Price);
    //        storedProcedureBuilder.HasParameter(duproduct => duproduct.Quantity);
    //    })
    //.UpdateUsingStoredProcedure(
    //    "DuProduct_Update",
    //    storedProcedureBuilder =>
    //    {
    //        storedProcedureBuilder.HasOriginalValueParameter(duproduct => duproduct.Id);
    //        storedProcedureBuilder.HasOriginalValueParameter(duproduct => duproduct.Name);
    //        storedProcedureBuilder.HasParameter(duproduct => duproduct.Name);
    //        storedProcedureBuilder.HasParameter(duproduct => duproduct.Price);
    //        storedProcedureBuilder.HasParameter(duproduct => duproduct.Quantity);
    //        storedProcedureBuilder.HasRowsAffectedResultColumn();
    //    })
    //.DeleteUsingStoredProcedure(
    //    "DuProduct_Delete",
    //    storedProcedureBuilder =>
    //    {
    //        storedProcedureBuilder.HasOriginalValueParameter(duproduct => duproduct.Id);
    //       // storedProcedureBuilder.HasOriginalValueParameter(duproduct => duproduct.Name);
    //        storedProcedureBuilder.HasRowsAffectedResultColumn();
    //    });
 
    modelBuilder.Entity<People>()
         .InsertUsingStoredProcedure(  //添加
 "People_Insert",
 storedProcedureBuilder =>
 {
     storedProcedureBuilder.HasParameter(a => a.Name);
     storedProcedureBuilder.HasParameter(a => a.Name_Original);
     storedProcedureBuilder.HasResultColumn(a => a.Id);
 })
 .UpdateUsingStoredProcedure(   //修改
         "People_Update",
    storedProcedureBuilder =>
    {
        storedProcedureBuilder.HasOriginalValueParameter(person => person.Id);  //HasOriginalValueParameter()
        //storedProcedureBuilder.HasOriginalValueParameter(person => person.Name);
       // storedProcedureBuilder.HasParameter(person => person.Id);
        storedProcedureBuilder.HasParameter(person => person.Name);
        storedProcedureBuilder.HasParameter(person => person.Name_Original);
        //storedProcedureBuilder.HasRowsAffectedResultColumn();
    })
 .DeleteUsingStoredProcedure(
 "People_Delete",
  storedProcedureBuilder =>
 {
     storedProcedureBuilder.HasOriginalValueParameter(person => person.Id);
     // storedProcedureBuilder.HasOriginalValueParameter(person => person.Name_Original);   
     //storedProcedureBuilder.HasParameter(person => person.Name_Original);
     //storedProcedureBuilder.HasRowsAffectedResultColumn();
 })
 ;
 
 
 
    //返回值
    //        .UpdateUsingStoredProcedure(
    //         "DuProduct_Update",
    //storedProcedureBuilder =>
    //{
    //    storedProcedureBuilder.HasOriginalValueParameter(duproduct => duproduct.Id);
    //    storedProcedureBuilder.HasOriginalValueParameter(duproduct => document.RowVersion);
    //    storedProcedureBuilder.HasParameter(duproduct => duproduct.Title);
    //    storedProcedureBuilder.HasParameter(duproduct => duproduct.RowVersion, parameterBuilder => parameterBuilder.IsOutput());
    //    storedProcedureBuilder.HasRowsAffectedResultColumn();
    //});
 
 
    base.OnModelCreating(modelBuilder);
 
 
}

调用:

代码语言:javascript
复制
DuDbContext context = new DuDbContext();
            People people = new People();
           // people.Id= 1;
            people.Name = "涂聚文Geovin Du";
            people.Name_Original = "china";
            context.People.Add(people);
            int k=context.SaveChanges();
            if(k>0)
            {
                Console.WriteLine("ok");
            }
            else
            {
                Console.WriteLine("no");
            }
 
            var dupeople = context.People.Where(b => b.Id == 1).First();
            if(!object.Equals(dupeople, null))
            {
                //dupeople=new People();
                //dupeople.Id = 1;
                dupeople.Name = "Geovin Du,涂聚文";
                dupeople.Name_Original = "chinasz";             
                context.Entry(dupeople).State = EntityState.Modified;
                k = context.SaveChanges();
                if (k > 0)
                {
                    Console.WriteLine("edit,ok");
                }
                else
                {
                    Console.WriteLine("edit no");
                }
 
            }
 
            var delpeople = context.People.Where(b => b.Id == 12).First();
            context.Entry(delpeople).State = EntityState.Deleted;
            k = context.SaveChanges();
            if (k > 0)
            {
                Console.WriteLine("del,ok");
            }
            else
            {
                Console.WriteLine("del no");
            }

输出

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档