【问题标题】:Can we create DbContext with two models我们可以用两个模型创建 DbContext
【发布时间】:2017-03-20 07:47:35
【问题描述】:

我是 Asp.net 的新手,并在 Asp.Net 中使用 MVC5 创建了一个 Web 应用程序。我有一个简单的问题,比如我们可以用两个模型创建 DbContext(如下图所示)。

从上面的代码中,我可以将 CRUD 操作应用于 Employee 模型。但是我得到了这个异常:

System.Data.SqlClient.SqlException:无效的对象名称'dbo.User 详情'

对于 UserDetails 模型,我怀疑它的发生只是因为一个 DbContext 中有两个模型。我的方法是否正确?

请帮帮我..

【问题讨论】:

  • 是否存在表“dbo.User”?也许您还需要将其添加到上下文中
  • 当然,您可以在DbContext 类中添加多个DbSet,只要实体类型名称存在即可。哪个 CRUD 操作抛出异常?
  • @user2657943 是的,它以表名“用户详细信息”存在; @Tetsuya Yamamoto 在使用 db.UserDetails.Add(userDetails); 添加数据后,await db.SaveChangesAsync(); 出现异常
  • 打开 UserDetails 类并在其上方放置一个[Table("YourTableName")]。如果它不起作用,请尝试运行迁移。我打赌 EF 会为您创建正确的表格。
  • 如果你在上下文类中有重写OnModelCreating方法,你可以在modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();之后尝试modelBuilder.Entity<UserDetails>().ToTable("UserDetails");,然后使用Database.SetInitializer<EmployeeContext>(new CreateDatabaseIfNotExists<EmployeeContext>());

标签: c# sql-server model asp.net-mvc-5 datacontext


【解决方案1】:

这可能与数据库名称的复数有关。在您的 EmployeeContext 类中尝试

        protected override void OnModelCreating(DbModelBuilder modelBuilder)  {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }

例子:

【讨论】:

  • 我应该在哪里创建这个方法?内部控制器??
  • 不,在 EmployeeContext 类中。 MS 文档中有一个示例:docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/… 这是一个大页面,但搜索创建数据库上下文。编辑我添加了相关代码的屏幕截图。
  • 仍然面临同样的问题:(
  • 您可能在某处拼写错误。错误消息中的用户和详细信息之间有一个空格。 System.Data.SqlClient.SqlException: Invalid object name 'dbo.User Details' 应该是:System.Data.SqlClient.SqlException: Invalid object name 'dbo.UserDetails' 你能贴出抛出异常的代码吗?
  • 我已经为我的模型类提供了 [Table("User Details")]。它抛出与用户详细信息同名的错误......即使我也尝试过作为用户详细信息。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 2021-09-07
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多