【问题标题】:EF can't SaveChanges to dbEF 无法将更改保存到数据库
【发布时间】:2014-11-04 21:17:15
【问题描述】:

我尝试创建一个Equation 实体并将其添加到 SQL Server db,我的代码中没有任何错误,但我没有看到 db 中的任何更改。

我在 Visual Studio 的服务器资源管理器中检查了 db,没有添加值。当我在我的项目中为其创建 ef 数据模型时,数据库被添加到项目中,因此 Visual Studio 在我的项目中制作了数据库的副本。但是我不知道为什么它在项目目录和/bind/Debug目录中创建了两个副本。

实体类:

public partial class Equation
    {
        public Equation()
        {
            this.Results = new HashSet<Result>();
        }

        public int id { get; set; }
        public double a { get; set; }
        public double b { get; set; }
        public double c { get; set; }

        public virtual ICollection<Result> Results { get; set; }
    }

id 是主键,具有标识(1,1)

我的代码:

private EquationDBEntities dbcontext = new EquationDBEntities();
Equation eq = new Equation()
{
    a = 1, b = 2, c = 3
};

dbcontext.Equations.Add(eq);
dbcontext.SaveChanges();

数据库上下文:

public partial class EquationDBEntities : DbContext
{
    public EquationDBEntities()
        : base("name=EquationDBEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Equation> Equations { get; set; }
    public virtual DbSet<Result> Results { get; set; }

连接字符串:

<connectionStrings>
<add name="EquationDBEntities" connectionString="metadata=res://*/EquationDBModel.csdl|res://*/EquationDBModel.ssdl|res://*/EquationDBModel.msl;
provider=System.Data.SqlClient;
provider connection string=&quot;
data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\EquationDB.mdf;
integrated security=True;connect timeout=30;
MultipleActiveResultSets=True;App=EntityFramework&quot;
" providerName="System.Data.EntityClient" />
</connectionStrings>

带有ef模型的项目的App.Config(我从我当前的项目中引用它)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="EquationDBEntities" connectionString="metadata=res://*/EquationDBModel.csdl|res://*/EquationDBModel.ssdl|res://*/EquationDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\EquationDB.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

有什么想法吗?

【问题讨论】:

  • 你能发布你的 DbContext 代码吗?
  • 您能告诉我们您的连接字符串吗?
  • 这些属性是您自己创建的,还是使用 .EMDX 模型从数据库中生成的?
  • 好的,现在我们到了某个地方。您能否发布一些您的 CONFIG 文件?
  • 如果你的问题是我认为的,这篇文章对问题(和修复)有很好的解释:visualstudiomagazine.com/blogs/tool-tracker/2012/05/…

标签: c# sql-server database entity-framework


【解决方案1】:

这是因为 |DataDirectory| 替换字符串意味着您的应用程序使用的数据库位于子文件夹 BIN\DEBUG 中。但是,当您将数据库添加到项目时,它会创建两个副本,一个在项目文件夹中,另一个在 BIN\DEBUG 中,并且您希望从项目文件夹中的数据库中进行更改,这就是您不这样做的原因'在服务器资源管理器中看不到任何内容,因为它可能连接错误。

【讨论】:

    【解决方案2】:

    我不知道你的上下文的上下文(不是双关语),所以在调用SaveChanges之前尝试将其状态设置为显式添加

    eq.EntityState = System.Data.EntityState.Added;
    

    虽然,如果您启用了跟踪,它应该知道它已被添加。

    【讨论】:

      【解决方案3】:

      将以下内容包装在尝试中...捕获并设置断点以查看是否引发任何异常:

      try
      {
        dbcontext.Equations.Add(eq);
        dbcontext.SaveChanges();
      }
      catch (Exception ex)
      {
        // Set a breakpoint and see if any problems are being raised
      }
      

      【讨论】:

      • 不进入catch块,无异常
      【解决方案4】:

      尝试从 bin/Debug 文件夹中打开 .mdf 文件,看看它是否有您的数据

      【讨论】:

        猜你喜欢
        • 2016-04-09
        • 1970-01-01
        • 2018-01-19
        • 1970-01-01
        • 1970-01-01
        • 2022-11-03
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        相关资源
        最近更新 更多