EF无法将SaveChanges保存到db

时间:2014-11-04 21:17:16

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

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

我在visual studio中检查服务器资源管理器中的数据库,并且没有添加值。当我在我的项目中为它创建ef数据模型时,db被添加到项目中,因此visual studio在我的项目中制作了db的副本。但我不知道为什么它在项目目录和/ 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();

的DbContext:

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; }

conectionString:

<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>

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

<?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>

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

尝试包装以下内容... Catch并设置断点以查看是否存在任何异常:

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

答案 2 :(得分:0)

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

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

虽然,如果您启用了跟踪功能,则应该知道已添加跟踪功能。

答案 3 :(得分:0)

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