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
,并且是这样做所需的最低代码

如果“不起作用”,请提供以下信息:

  • 它怎么不起作用?如果引发异常,请提供异常的所有属性(stacktrace、message、type和内部异常的相同属性)
  • 如果您没有看到结果,请描述您如何检查未创建/添加实体的存储?它可以很简单,当您从VS执行应用程序时,您可以覆盖本地db上的.mdf文件
  • 包括实体
    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
    }