使用默认参数执行存储过程

时间:2019-03-23 10:36:57

标签: c# sql-server entity-framework

我需要使用带有三个参数的存储过程。第二个参数是默认值。我不允许修改存储过程。当我尝试使用Entity Framework执行存储过程时,我传递了第一个和第三个参数。而且我得到的错误是没有提供第三个参数。

这是存储过程的签名:

[dbo].[sp_CreateTest] 
      @Par1 NVARCHAR(25),
      @Par2 NVARCHAR(50) = 'Test',
      @Par3 NVARCHAR(50)

我正在尝试像这样执行它:

List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@Par1", "Parameter1 data"));
parameters.Add(new SqlParameter("@Par3", "Parameter3 data"));

testEnt.Database.ExecuteSqlCommand("exec dbo.sp_CreateTest @Par1, @Par3", parameters.ToArray());

3 个答案:

答案 0 :(得分:1)

您可以使用“默认”作为参数来代替第二个参数。 即

“ exec dbo.sp_CreateTest @ Par1,DEFAULT,@ Par3”

答案 1 :(得分:1)

一种方法是使用命名参数表示法而不是位置表示法,以便对未指定的参数使用默认值。这样也可以避免与参数序号紧密耦合。

testEnt.Database.ExecuteSqlCommand("exec dbo.sp_CreateTest @Par1=@Par1, @Par3=@Par3", parameters.ToArray());

答案 2 :(得分:0)

示例:

 public class BlogContext : DbContext
 {

 public DbSet<Post> Posts { get; set; }

 public BlogContext(DbContextOptions<BlogContext> options) : base(options)
 {
 }

 protected override void OnModelCreating(ModelBuilder modelBuilder)
 {
     base.OnModelCreating(modelBuilder);

     modelBuilder.Entity<Post>().Property(p => p.Text).HasDefaultValue("Default");
 }

}