我们使用模型优先方法创建了一个网络应用程序。一位新开发人员加入了该项目,并使用代码优先方法(使用数据库文件)创建了一个新的自定义模型。
这是代码优先的数据库上下文。
namespace WVITDB.DAL
{
public class DashboardContext : DbContext
{
public DbSet<CTOReview> CTOReviews { get; set; }
public DbSet<Concept> Concepts { get; set; }
//public DashboardContext()
// : base("name=DashboardContext")
//{
//}
// protected override void OnModelCreating(DbModelBuilder modelBuilder)
// {
// //modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// }
}
}
以下 Controller 方法抛出错误 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);
}
当 DashboardContext 类被实例化时,两个 DBset 属性都会出现错误。
Controller 调用错误的数据库是否有原因?
编辑:
FavoriteProject 处于不同的上下文(我们的主要数据模型)中,与新的自定义模型无关。
最佳答案
已找到答案,但可能不是您想听到的:
“如果您使用 EDMX 文件的默认代码生成,则生成的类包含一系列属性,以帮助 EF 找到为每个实体类型使用哪个类。EF 目前有一个限制,即 POCO 类不能从包含具有 EF 属性的类的程序集中加载。(简短的回答是否定的,您的类需要在单独的项目中)。
这是一个有点人为的限制,我们意识到这是痛苦的,将来会尝试删除。”
因此解决方法是将类拆分为两个不同的程序集。
关于c# - 混合模型优先和代码优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899567/