【发布时间】:2016-12-18 11:34:35
【问题描述】:
我正在尝试创建一个控制台应用程序,我正在尝试使用实体框架来动态创建数据库和表来存储数据。但是,当我尝试将数据添加到我的 DbSet 时。我收到以下错误。
“System.InvalidOperationException”类型的未处理异常 发生在EntityFramework.dll中
附加信息:模型在运行时不能使用上下文 正在创建。如果使用上下文,可能会抛出此异常 在 OnModelCreating 方法内,或者如果相同的上下文实例是 由多个线程同时访问。请注意,实例成员 不保证 DbContext 和相关类是线程安全的。
我参考了其他有类似错误的帖子,但没有一个解决方案有效。这是一个单线程应用程序。
错误发生在行
this.context.Environments.Add(entity)
DataSource.cs
public class DataSource
{
private static DataSource instance;
public DataSource()
{
this.context = new CounterContext();
}
public static DataSource Instance
{
get
{
return instance ?? (instance = new DataSource());
}
}
private CounterContext context;
public void AddCockpitEnvironmentDetails(IList<Environment> environmentList)
{
foreach (var entity in environmentList)
{
this.context.Environments.Add(entity);
}
this.context.SaveChanges();
}
...
}
我的背景:
public class CounterContext : DbContext
{
public CounterContext()
: base("name=CounterDbString")
{
Database.SetInitializer<CounterContext>(new CreateDatabaseIfNotExists<CounterContext>());
}
public DbSet<CounterData> CounterDetails { get; set; }
public DbSet<Environment> Environments { get; set; }
}
型号
public class Environment
{
[Key]
public Guid Id { get; set; }
public string EnvironmentName { get; set; }
public string EnvironmentNotes { get; set; }
public virtual ICollection<CounterDetail> CounterDetails { get; set; }
};
public class CounterData
{
[Key]
[Column(Order = 1)]
public DateTime counterTime { get; set; }
[Key]
[Column(Order = 2)]
public int counterName { get; set; }
[Key]
[Column(Order = 3)]
public Guid EnvId {get; set;}
public int count { get; set; }
[ForeignKey("EnvId")]
public virtual CockpitEnvironment Machine { get; set; }
}
App.config:
<connectionStrings>
<add name="CounterDbString"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Counters_Test;Integrated Security=True;Connect Timeout=30"
providerName="System.Data.SqlClient"/>
</connectionStrings>
【问题讨论】:
-
从你的构造函数中移除
this.context并将其添加到方法AddCockpitEnvironmentDetails中并查看 -
不工作。但是我做了一个实验,首先在 SQL Server 中添加 mdf 文件,然后运行代码。有效。所以问题是它无法创建表。但不确定如何解决此问题。
标签: c# entity-framework