混合模型优先和代码优先
我们使用模型优先方法创建了一个 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>();
// }
}
}
以下控制器方法抛出错误无法找到“WVITDB.Models.FavoriteProject”的概念模型类型。
并引用原始数据库模型。我们不确定它为什么(或如何)这么称呼。
public ViewResult Index()
{
var d = db.Concepts.ToList(); //Throws error here
return View("Index",d);
}
实例化 DashboardContextclass 时,两个 DBset 属性都会显示错误。
控制器调用错误的数据库是否有原因?
编辑:
FavoriteProject 处于不同的上下文(我们的主要数据模型)中,与新的自定义模型无关。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
找到了答案,但这可能不是您想听到的:
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/d2a07542-cb33-48ba-86ed-4fdc70fb3f1a
“如果您使用默认代码生成对于 EDMX 文件,生成的类包含一系列属性,以帮助 EF 找到要用于每个实体类型的类,EF 当前有一个限制。 POCO 类无法从包含具有 EF 属性的类的程序集中加载(简短的答案是否定的,您的类需要位于单独的项目中),
这是一个有点人为的限制,我们意识到这是痛苦的,并将尝试。并在将来删除。”
因此,解决方法是将类拆分为两个不同的程序集。
Found an answer, it maybe not what you want to hear though:
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/d2a07542-cb33-48ba-86ed-4fdc70fb3f1a
"If you are using the default code generation for the EDMX file then the generated classes contain a series of attributes to help EF find which class to use for each entity type. EF currently has a restriction that POCO classes can't be loaded from an assembly that contains classes with the EF attributes. (Short answer is no, your classes need to be in separate projects).
This is a somewhat artificial restriction and something that we realize is painful and will try and remove in the future."
So the workaround would be to split the classes into two different assemblies.
ajpaz - 您可能必须以编程方式将现有模型“映射”到数据库表。我从错误消息中假设它正在寻找 FavouriteProject 表/类映射。也许数据库将其定义为单数,在这种情况下尝试:
您还需要按照上面的方式做一个数据库集(或复数的一些排列):
可能很遥远,只是一个想法
[编辑]< /strong> - 覆盖 web.config 中的代码第一个 dbcontext(在连接字符串下 [名称 必须 与您的 dbcontext 名称匹配]):
ajpaz - you may have to 'map' your existing model to the database table programatically. i'm assuming from the error message that its looking for the FavouriteProject table/class mapping. maybe the db has this defined as a singular, in which case try:
you'd also need to do a dbset as per above (or some permutation of plurals):
might be miles off, just a thought
[edit] - overiding your code 1st dbcontext in web.config (under connectionstrings [name MUST match your dbcontext name]):