我在 .NET 6 中有一个类库项目,我在其中使用 EF Core。我能够使用代码优先方法创建表,但仍停留在如何创建存储过程上。我在 Google 上看过一些文章,但它显示使用旧的 EF 6,但不适用于 EF Core。
没有使用 EF Core 自动创建存储过程的方法,但手动创建存储过程的过程非常简单。
首先像平常一样创建一个新的迁移,它应该是空的。然后编辑迁移以手动创建过程。例如:
public partial class MyNewStoredProcMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("CREATE PROC DoStuff....");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("DROP PROC DoStuff");
}
}
请注意,您可能希望将过程的字符串移动到资源文件中以保持整洁。
现在可以在 EF Core 7.0 中使用 存储过程映射:
modelBuilder.Entity<Person>()
.InsertUsingStoredProcedure("People_Insert", builder =>
{
builder.HasParameter(a => a.Name);
builder.HasResultColumn(a => a.Id);
})
.UpdateUsingStoredProcedure("People_Update", builder =>
{
builder.HasOriginalValueParameter(person => person.Id);
builder.HasOriginalValueParameter(person => person.Name);
builder.HasParameter(person => person.Name);
builder.HasRowsAffectedResultColumn();
})
.DeleteUsingStoredProcedure("People_Delete", builder =>
{
builder.HasOriginalValueParameter(person => person.Id);
builder.HasOriginalValueParameter(person => person.Name);
builder.HasRowsAffectedResultColumn();
});