Я некоторое время боролся за то, чтобы преобразовать довольно большую базу данных EntityFramework, созданную сначала в модели, в codefirst.У меня проблема, которую я не могу решить.Я получаю ссылку на объект, не установленную для экземпляра объекта со следующими процедурами в стеке вызовов.
ModelConfiguration.Configuration.Types.EntityTypeConfiguration.Configure
ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntities
, чтобы упростить публикацию. Я создал тестовый проект, который сводит проблему к ее простейшемуform.
У меня есть 3 класса
- a, у которых есть необязательный b и необязательный c
- b, у которого есть коллекция из a и коллекцияc's
c, который имеет необязательный b и набор из a
public class a
{
public int Id { get; set; }
[Required]
public string name { get; set; }
public virtual b b { get; set; }
[ForeignKey("b")]
public int? b_Id { get; set; }
public virtual c c { get; set; }
[ForeignKey("c")]
public int? c_Id { get; set; }
}
public class b
{
public int Id { get; set; }
public string name { get; set; }
public virtual ICollection<a> a_s { get; set; }
public virtual ICollection<c> c_s { get; set; }
}
public class c
{
public int Id { get; set; }
public virtual b b { get; set; }
[ForeignKey("b")]
public int? b_Id { get; set; }
public virtual ICollection<a> a_s { get; set; }
}
public class MyContext : DbContext
{
public DbSet<a> a { get; set; }
public DbSet<b> b { get; set; }
public DbSet<c> c { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<a>()
.HasOptional(m => m.b)
.WithMany(m => m.a_s);
modelBuilder.Entity<b>()
.HasMany(m => m.c_s)
.WithRequired(m => m.b);
modelBuilder.Entity<c>()
.HasMany(m => m.a_s)
.WithOptional(m => m.c);
base.OnModelCreating(modelBuilder);
}
}
, когда я выполняю код var a = from o в db.a выберите o, я получаюошибка описана выше.Там нет абсолютно никакой информации о том, что происходит, поэтому я действительно не знаю, куда обратиться.Может кто-нибудь помочь мне решить эту проблему, так как я действительно хочу отойти от Model First.
namespace MvcApplication2.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
var db = new MyContext();
var a = from o in db.a select o;
return View();
}
}
}