C# 实体框架&x27;DBContext不';更新数据库
我正在尝试为我管理的数据库创建一行。 我尝试构建一个代码作为示例,以检查它是否工作,但它不会更新数据库:C# 实体框架&x27;DBContext不';更新数据库,c#,entity-framework,C#,Entity Framework,我正在尝试为我管理的数据库创建一行。 我尝试构建一个代码作为示例,以检查它是否工作,但它不会更新数据库: PolicyList = await LoadPolicy(); //Loads Policy List tblPolicy tbl = new tblPolicy(); //Creates a new policy entity tbl.polID = 5; //Sets ID to 5 tbl.polName = "
PolicyList = await LoadPolicy(); //Loads Policy List
tblPolicy tbl = new tblPolicy(); //Creates a new policy entity
tbl.polID = 5; //Sets ID to 5
tbl.polName = "Ryder"; //Sets name
mdbe.tblPolicies.Add(tbl); //Adds to the dbcontext object
mdbe.Entry(tbl).State = EntityState.Added; //Changes the state to "Added"
await mdbe.SaveChangesAsync(); //Saves changes
无论是否使用异步方法,它都不起作用,EntityState.Added也是如此。
如何保存更改
private async Task<List<tblPolicy>> LoadPolicy()
{
return await Task.Run(() => mdbe.tblPolicies.ToList());
}
entryDBentities的POCO类:
public partial class EntryDBEntities : DbContext
{
public EntryDBEntities()
: base("name=EntryDBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<tblEntry> tblEntries { get; set; }
public virtual DbSet<tblEntryPolicy> tblEntryPolicies { get; set; }
public virtual DbSet<tblPolicy> tblPolicies { get; set; }
}
public分部类EntryDBEntities:DbContext
{
公共入口数据库实体()
:base(“name=EntryDBEntities”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共虚拟数据库集tblentrys{get;set;}
公共虚拟数据库集tblEntryPolicies{get;set;}
公共虚拟数据库集tblPolicies{get;set;}
}
您应该删除代码中不必要/多余的部分,并创建一个MVE()进行测试
using(EntryDBEntities mdbe = new EntryDBEntities())
{
// PolicyList = await LoadPolicy(); // do not include this, it has nothing to do with adding a new entity based on the code you have shown
tblPolicy tbl = new tblPolicy(); //Creates a new policy entity
tbl.polID = 5; //Sets ID to 5
tbl.polName = "Ryder"; //Sets name
mdbe.tblPolicies.Add(tbl); //Adds to the dbcontext object
await mdbe.SaveChangesAsync(); //Saves changes
}
上面的片段应该向基础数据库添加一个新的tblPolicy
,并且是这样做所需的最低代码
如果“不起作用”,请提供以下信息:
tblPolicy
请发布完整的源代码。哪个数据库没有更新?我的意思是如何验证这个问题?它会引发异常吗?第一行代码看起来很奇怪,您不需要
mdbe.Entry(tbl).State=EntityState.Added//将状态更改为“已添加”
。尝试SaveChanges()而不是SaveChangesSync()。如果这样做有效,您的代码中可能存在异步问题。原因是什么<代码>返回等待任务。运行(()=>mdbe.tblPolicies.ToList())代码>为什么不等待mdbe.tblPolicies.toListSync()
?实际上,只需删除整个方法并将其内联移动。它不会更新我的数据库,也不会引发任何异常。我通过观察数据库上的数据来检查它,我看到它保持不变。我已经更新了问题中的映射
using(EntryDBEntities mdbe = new EntryDBEntities())
{
// PolicyList = await LoadPolicy(); // do not include this, it has nothing to do with adding a new entity based on the code you have shown
tblPolicy tbl = new tblPolicy(); //Creates a new policy entity
tbl.polID = 5; //Sets ID to 5
tbl.polName = "Ryder"; //Sets name
mdbe.tblPolicies.Add(tbl); //Adds to the dbcontext object
await mdbe.SaveChangesAsync(); //Saves changes
}