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

sql:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Table("People")]
public class People
{
     
    public People() { }
    [Key]
    public int Id { get;set;}
 
 
    [StringLength(50)] 
    public string Name { get;set;}
 
 
    [StringLength(100)]
    public string Name_Original { get;set;}
 
}

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
    // 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);
 
 
}

  

调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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");
            }

  

输出:

 from: What's New in EF Core 7.0 | Microsoft Learn

posted @   ®Geovin Du Dream Park™  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2015-02-06 csharp:datagridview enter Half Width and Full Width characters
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示