【发布时间】:2018-09-13 16:19:41
【问题描述】:
当我尝试使用 EF db 上下文从数据库中获取实体时,出现 NullReferenceException:
这是我的测试代码:
// it works fine
using (var sql = new SqlConnection("--here is my connection string--"))
{
sql.Open();
var cmd = sql.CreateCommand();
cmd.CommandText = "select field1, field2 from my_table";
var reader = cmd.ExecuteReader();
reader.Read();
// here is true value
var val = reader.GetValue(0);
}
// failed
var ctx = new BackupDbContext();
var query = ctx.Database.SqlQuery<MyEntity>("select field1, field2 from my_table");
var res = query.ToList(); // NullReferenceException
// failed
var tt = ctx.MyEntities.ToList(); // NullReferenceException
我的 DbContext 和映射:
public class MyEntityMapping : EntityTypeConfiguration<MyEntity>
{
public MyEntityMapping()
{
ToTable("my_table");
HasKey(p => p.Field1);
Property(p => p.Field1).HasColumnName("field1");
Property(p => p.Field2).HasColumnName("field2");
}
}
public class BackupDbContext: DbContext
{
static BackupDbContext()
{
Database.SetInitializer<BackupDbContext>(null);
}
public BackupDbContext():base("name=BackupDbContext")
{
Database.Log = sql => Debug.Write(sql);
}
public virtual DbSet<MyEntity> MyEntities { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("dbo");
modelBuilder.Configurations
.Add(new MyEntityMapping());
}
}
我不知道异常的原因是什么。
我有以下堆栈跟踪:
有没有人知道为什么会这样或者可以给我一个提示?
编辑:
连接: ...
<connectionStrings>
<add name="BackupDbContext" connectionString="Data Source=My_datasource;Encrypt=False;Initial Catalog=my_db;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
【问题讨论】:
-
我认为您的 BackupDbContext 类中缺少连接字符串。尝试 public BackupDbContext () : base("BackupDbConStr") { } 在连接字符串部分下的配置文件中提及“BackupDbConStr”。
-
不是建议的副本,用户代码不会抛出此异常。 EF 似乎在添加错误时从模型构建器中抛出。
-
CodeCaster,异常的原因可能是什么?
-
什么是第二码?我用谷歌搜索过,我唯一能找到的是模型优先方法的支持工具 - 但是,在模型优先的情况下,更改模型构建器的可能性很小。
标签: c# .net sql-server entity-framework nullreferenceexception