C# 写列表<&燃气轮机;到数据库asp.net
我一直在写数据库C# 写列表<&燃气轮机;到数据库asp.net,c#,asp.net,sql-server,asp.net-mvc,asp.net-core,C#,Asp.net,Sql Server,Asp.net Mvc,Asp.net Core,我一直在写数据库 不要给我任何错误 写命令不起作用 控制器: [HttpPost] public async Task<ActionResult>PartialTabelaEcp(string userDate) { var numerMiesiaca = 1; var numerRoku = 1; var dbExists = _ecpContext.Karta.FirstOrDefault(f => f.DzMiesiaca == 1 &am
[HttpPost]
public async Task<ActionResult>PartialTabelaEcp(string userDate)
{
var numerMiesiaca = 1;
var numerRoku = 1;
var dbExists = _ecpContext.Karta.FirstOrDefault(f => f.DzMiesiaca == 1 && f.Miesiac ==
numerMiesiaca && f.Rok == numerRoku && f.Login == userName);
if (dbExists == null)
{
List<Karta_Model> objKartaModel = new List<Karta_Model>();
for (int i = 1; i <= liczbaDni; i++)
{
DateTime thisDate = new DateTime(numerRoku, numerMiesiaca, i);
var day = culture.DateTimeFormat.GetDayName(thisDate.DayOfWeek);
var model = new Karta_Model()
{
DzMiesiaca = i,
DzTygodnia = day,
Rozpoczecie = "00:00"
};
objKartaModel.Add(model);
}
await _ecpContext.Karta.AddRangeAsync(objKartaModel);
await _ecpContext.SaveChangesAsync();
}
}
return PartialView("_TabelaEwidencja" );
public partial class Karta_Model
{
public int? DzMiesiaca { get; set; }
public string? DzTygodnia { get; set; }
public string? Rozpoczecie { get; set; }
}
正如@ADyson提到的,您正在同步代码中使用异步方法。因此,要么需要使代码异步(如@David或@Amankhani MohammadJavad),要么使方法同步。EF提供了
AddRange
和SaveChanges
两种方法
改变
_ecpContext.Karta.AddRangeAsync(objKartaModel);
_ecpContext.SaveChangesAsync();
到
您的方法正在调用
async
操作:
_ecpContext.Karta.AddRangeAsync(objKartaModel);
_ecpContext.SaveChangesAsync();
因此,您需要等待他们:
await _ecpContext.Karta.AddRangeAsync(objKartaModel);
await _ecpContext.SaveChangesAsync();
为此,您的方法还需要是async
:
public async Task<ActionResult> PartialTabelaEcp(string userDate)
public异步任务partialTableAP(字符串userDate)
如果您不等待异步操作,那么代码将在它们完成之前继续执行,因此当您进入
savechangesync
时,就没有什么要保存的了。(该操作本身可能会失败,您没有观察到失败。)您使用的是异步方法,但您的方法不是异步方法。您可以执行以下操作:
[HttpPost]
public async Task<ActionResult> PartialTabelaEcp(string userDate)
{
var numerMiesiaca = 1;
var numerRoku = 1;
var dbExists = _ecpContext.Karta.FirstOrDefaultAsync(f => f.DzMiesiaca == 1 && f.Miesiac ==
numerMiesiaca && f.Rok == numerRoku && f.Login == userName);
if (dbExists == null)
{
List<Karta_Model> objKartaModel = new List<Karta_Model>();
for (int i = 1; i <= liczbaDni; i++)
{
DateTime thisDate = new DateTime(numerRoku, numerMiesiaca, i);
var day = culture.DateTimeFormat.GetDayName(thisDate.DayOfWeek);
var model = new Karta_Model()
{
DzMiesiaca = i,
DzTygodnia = day,
Rozpoczecie = "00:00"
};
objKartaModel.Add(model);
}
await _ecpContext.Karta.AddRangeAsync(objKartaModel);
await _ecpContext.SaveChangesAsync();
}
}
return PartialView("_TabelaEwidencja" );
[HttpPost]
公共异步任务partialTableAP(字符串userDate)
{
var numeriesiaca=1;
var Numeroku=1;
var dbExists=\u ecpContext.Karta.FirstOrDefaultAsync(f=>f.DzMiesiaca==1&f.Miesiac==
numeriesiaca&f.Rok==numeriroku&f.Login==用户名);
if(dbExists==null)
{
List objKartaModel=新列表();
对于(int i=1;i)您正在使用异步方法,但在移动到下一个命令之前没有等待结果。@ADyson,我如何通过编程实现这一点?似乎您可能需要学习一些异步编程入门教程-既要了解异步的用途,也要了解如何使用它。tldr:要么将您的外部方法设置为ync
然后等待
这些方法,或者改用这些方法的同步版本。在这种情况下,使用异步/等待模式通常是有利的,因为它在执行数据库操作时释放.NET代码中的线程,这意味着您的服务器有更多的容量来响应其他请求rgot等待方法内部的异步调用。如果不这样做,则无法解决问题。你不能说这是一个有缺陷的解决方案,可以通过这种方式解决问题。问题出在哪里?抱歉,在我写这篇文章时,我的页面没有使用你添加的wait
的编辑进行更新。我现在删除了第二条评论。Howev呃,我认为你也应该在答案中添加文字,解释为什么wait
和其他答案一样,也是解决方案的一个必要部分。我想尽快完成工作并解决他们的问题。谢谢你……因为?不要只把代码丢给别人。解释你的更改意味着什么以及为什么它会起作用(以及任何暗示,例如,在本例中,失去异步I/O操作的优势。)否则,不真正理解此主题的人可能只是盲目地复制和粘贴代码而不理解它。您已经解释过:)我已经解释了一部分。但是如果你想避免被否决,你还是应该把它更完整地添加到答案正文中。。。
[HttpPost]
public async Task<ActionResult> PartialTabelaEcp(string userDate)
{
var numerMiesiaca = 1;
var numerRoku = 1;
var dbExists = _ecpContext.Karta.FirstOrDefaultAsync(f => f.DzMiesiaca == 1 && f.Miesiac ==
numerMiesiaca && f.Rok == numerRoku && f.Login == userName);
if (dbExists == null)
{
List<Karta_Model> objKartaModel = new List<Karta_Model>();
for (int i = 1; i <= liczbaDni; i++)
{
DateTime thisDate = new DateTime(numerRoku, numerMiesiaca, i);
var day = culture.DateTimeFormat.GetDayName(thisDate.DayOfWeek);
var model = new Karta_Model()
{
DzMiesiaca = i,
DzTygodnia = day,
Rozpoczecie = "00:00"
};
objKartaModel.Add(model);
}
await _ecpContext.Karta.AddRangeAsync(objKartaModel);
await _ecpContext.SaveChangesAsync();
}
}
return PartialView("_TabelaEwidencja" );