C# 混合模型优先和代码优先

C# 混合模型优先和代码优先,c#,asp.net-mvc,entity-framework,entity,C#,Asp.net Mvc,Entity Framework,Entity,我们使用模型优先的方法创建了一个web应用程序。一个新的开发人员加入到项目中,并使用代码优先的方法(使用数据库文件)创建了一个新的自定义模型。 下面是代码优先的数据库上下文 namespace WVITDB.DAL { public class DashboardContext : DbContext { public DbSet<CTOReview> CTOReviews { get; set; } public DbSet<Concept> Conce

我们使用模型优先的方法创建了一个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>();
   // }
}
}
实例化DashboardContextclass时,两个DBset属性都会显示错误

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

编辑:


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

ajpaz-您可能需要通过编程将现有模型“映射”到数据库表。我从错误消息中假设它正在查找FavoriteProject表/类映射。可能db将其定义为单数,在这种情况下,请尝试:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<FavouriteProjects>().ToTable("FavouriteProject");
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“FavoriteProject”);
}
您还需要按照上面所述进行dbset(或复数的一些排列):

public DbSet-favoriteProject{get;set;}
也许有好几英里远,只是一个想法

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


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

“如果您使用EDMX文件的默认代码生成,则生成的类包含一系列属性,以帮助EF查找每个实体类型使用的类。EF当前有一个限制,即不能从包含具有EF属性的类的程序集加载POCO类。(简短的回答是否定的,你的课程需要在不同的项目中)

这是一种人为的限制,我们意识到这是一种痛苦,并将在未来尝试消除。”


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

我会与新开发人员“谈谈”,让他/她通过离线概念验证来证明这两个类可以愉快地生活在一起,然后让他们在将其放入核心库之前将其集成到搁置集中。这听起来很不靠谱。哟但是,您可以通过编程方式“附加”非codefirst表。将在后续消息中记下语法。问题是FavoriteProject与此特定dbContext无关。FavoriteProject未在控制器、模型或视图中调用。仪表板上下文和FavoriteProject不相关。因此,您不引用集合或者FavoriteProject的父属性从2个代码第一类中的任何一个内部…嗯,我认为奇怪的错误。旧模型在这些新模型上都没有FK,我猜我也在团队中…所以插话。数据模型是完全独立的,不相互引用。较新的数据模型实际上是以d在它自己的项目中进行了测试。一旦我们将新模型/视图/控制器合并到现有的应用程序中,我们遇到了这个错误。ZeroDivide-这可能是名称空间的问题吗?保留这两个(dal/模型)是否更好程序集是分开的,直到您让控制器和视图针对每个相应的源工作??此外,您可以尝试重写web.config中的dbcontext connectionstring,以便确定其指向最初模型在不同名称空间中的位置仍然是相同的错误。我认为重写dbcontext connectionstring将是一个好方法。您能解释一下在何处以及如何执行此操作吗。谢谢
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<FavouriteProjects>().ToTable("FavouriteProject");
}
public DbSet<FavouriteProjects> FavouriteProjects{ get; set; }
<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"/>