我尝试创建一个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="
data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\EquationDB.mdf;
integrated security=True;connect timeout=30;
MultipleActiveResultSets=True;App=EntityFramework"
" 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="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\EquationDB.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework"" 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>
有什么想法吗?
答案 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文件,看看它是否有您的数据