混合模型首先和代码优先

我们使用模型第一种方法创建了一个Web应用程序。 一位新开发人员进入该项目并使用代码优先方法(使用数据库文件)创建了一个新的自定义模型。 该

这是代码第一个数据库上下文。

namespace WVITDB.DAL { public class DashboardContext : DbContext { public DbSet CTOReviews { get; set; } public DbSet Concepts { get; set; } //public DashboardContext() // : base("name=DashboardContext") //{ //} // protected override void OnModelCreating(DbModelBuilder modelBuilder) // { // //modelBuilder.Conventions.Remove(); // } } } 

以下控制器方法抛出错误Could not find the conceptual model type for 'WVITDB.Models.FavoriteProject'. 并指原始数据库模型。 我们不确定为什么(或如何)调用它。

  public ViewResult Index() { var d = db.Concepts.ToList(); //Throws error here return View("Index",d); } 

实例化DashboardContextclass时,将显示两个DBset属性的错误。

控制器调用错误的数据库是否有原因?

编辑:

FavoriteProject位于不同的上下文(我们的主数据模型)中,与新的自定义模型无关。

找到答案,它可能不是你想听到的:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/d2a07542-cb33-48ba-86ed-4fdc70fb3f1a

“如果您使用EDMX文件的默认代码生成,则生成的类包含一系列属性,以帮助EF查找每个实体类型使用哪个类.EF目前有一个限制,即无法从一个POCO类加载包含具有EF属性的类的程序集。(简答之,不需要,您的类需要在单独的项目中)。

这是一种有点人为的限制,我们意识到这是一种痛苦,将来会尝试删除。“

因此,解决方法是将类拆分为两个不同的程序集。

ajpaz – 您可能必须以编程方式将现有模型“映射”到数据库表。 我从错误消息中假设它正在寻找FavouriteProject表/类映射。 也许db将此定义为单数,在这种情况下尝试:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("FavouriteProject"); } 

你还需要按照上面的方法做一个dbset(或复数的一些排列):

 public DbSet FavouriteProjects{ get; set; } 

可能是几英里外,只是一个想法

[edit] – 覆盖你的代码web.config中的第一个dbcontext(在connectionstrings [name 必须匹配你的dbcontext名称]下):