混合模型首先和代码优先

ajp*_*paz 7 c# asp.net-mvc entity entity-framework

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

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

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>();
   // }
}
}
Run Code Online (Sandbox Code Playgroud)

以下控制器方法抛出错误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);
        }
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

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

jim*_*lan 0

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<FavouriteProjects>().ToTable("FavouriteProject");
}
Run Code Online (Sandbox Code Playgroud)

您还需要按照上面的方式执行 dbset (或复数的一些排列):

public DbSet<FavouriteProjects> FavouriteProjects{ get; set; }
Run Code Online (Sandbox Code Playgroud)

可能有数英里之遥,只是一个想法

[编辑] - 覆盖 web.config 中的代码第一个 dbcontext (在连接字符串下 [名称必须与您的 dbcontext 名称匹配]):

<add name="DashboardContext" connectionString="Data Source=remote.sqlserver.server;Initial Catalog=code_first_db;Persist Security Info=True;MultipleActiveResultSets=True;User ID=code_first_db_user;Password=password" providerName="System.Data.SqlClient"/>
Run Code Online (Sandbox Code Playgroud)