我需要使用带有三个参数的存储过程。第二个参数是默认值。我不允许修改存储过程。当我尝试使用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());
答案 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");
}
}