c# - MVC Core DbContext 设置在函数调用之间
问题描述
我有一个非常简单的服务,它创建实体并将字母数字序列分配给属性,然后将实体持久保存到数据库。上下文通过 MVC Core 依赖注入注入到服务中,就像这样。
// Configure DB context
var connectionString = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<MyDataContext>(opt => opt.UseSqlServer(connectionString, sql => sql.MigrationsAssembly(migrationAssembly)));
上下文在服务构造函数中通过
public MyService(MyDataContext myDataContext)
{
this.myDataContext = myDataContext;
}
执行插入的逻辑如下
public async Task GenerateRecord()
{
// Init the entity
var myEntity = new myEntity
{
Id = Guid.NewGuid(),
DateCreated = DateTime.Now,
Sequence = await GetSequence();
};
myDataContext.MyEntities.Add(myEntity);
myDataContext.SaveChanges();
}
生成序列的逻辑是
private async Task<string> GetSequence()
{
DbCommand cmd = myDataContext.Database.GetDbConnection().CreateCommand();
cmd.CommandText = "dbo.fnGetAlphaNumSeqID";
cmd.CommandType = CommandType.StoredProcedure;
DbParameter param = cmd.CreateParameter();
param.Value = "";
param.DbType = DbType.String;
param.Size = 100;
param.Direction = ParameterDirection.Output;
param.ParameterName = "@ReturnSequence";
cmd.Parameters.Add(param);
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
await cmd.ExecuteNonQueryAsync();
var newId = param.Value.ToString();
return newId;
}
我遇到的问题是,在调用ExecuteNonQueryAsync
上下文之后。我正在等待函数中唯一的异步调用,并且正在返回async Task
而不是async void
. 我目前无法确定使此成功的适当方法,或者为什么在using()
声明中未使用上下文时要处理上下文,并希望有人能指出我正确的方向。
解决方案
推荐阅读
- angular - 在Angular 7中将环境变量从一个模块传递到另一个模块
- javascript - Spring Boot 在站点发送但不与邮递员发送时拒绝正文
- javascript - 使用此示例 json 循环访问复杂和嵌套的 JSON
- typescript - 如何设置类方法的类型?
- c - 如何按地址交换两个数字?
- manim - 如何为分数的一部分着色,例如分母
- python - TypeError:“builtin_function_or_method”对象不可用于python
- python - 使用 OpenCV 从网络摄像头保存两个操作视频
- c - 如何通过无限级数循环常数e
- mysql - SELECT 关键字在错误的位置