[英]Entity Framework - Null Reference Exception
當我嘗試從具有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>
您應該在webconfig文件中定義一個ConnectionString。
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=Your server nane;Initial Catalog=Your database name;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
然后,您必須在DbContext中使用它
public BackupDbContext():base("DefaultConnection")
{
Database.Log = sql => Debug.Write(sql);
}
現在,此語句應該起作用。
var ctx = new BackupDbContext();
var tt = ctx.MyEntities.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.