【发布时间】:2017-04-26 07:06:05
【问题描述】:
我正在构建一个 ASP.NET Core 1.1.0 应用程序,该应用程序需要使用 Entity Framework Core 访问现有的 MySQL 数据库,我在 Visual Studio 2015 中构建了所有最新更新。我开始使用“官方” MySQL 提供程序 (MySql.Data.EntityFrameworkCore),但 Pomelo prvider (Pomelo.EntityFrameworkCore.MySql) 遇到了同样的问题。
注入到我的 Home 控制器的上下文对象有各种 NotImplemented 异常,如图所示。成员是我的 DBSet 集合之一,使用 Member POCO。 (顺便说一句,我不打算使用迁移,所以这不是一个因素。)这是上下文对象在注入控制器后的状态,甚至在我尝试访问数据之前。
典型消息的完整细节是:
((Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure)this.db.Members).Instance' 抛出类型为“System.NotImplementedException”的异常
我认为我的 project.json 文件中没有什么非常有趣的,但相关的行是:
"Pomelo.EntityFrameworkCore.MySql": "1.1.0",
"Pomelo.EntityFrameworkCore.MySql.Design": "1.1.0"
在 ConfigureServices 方法的 Startup.cs 中,我有这些语句:
string connectionString = Configuration.GetConnectionString("ManageRCNConnection");
services.AddDbContext<MembersContext>(options => options.UseMySql(connectionString));
现在事情很简单。
到目前为止,我的 Google-foo 让我在试图找出问题所在时感到失望。
谁能告诉我问题出在哪里?
谢谢!
更新:如果我按照@Tseng 的建议忽略结构中的错误,我第一次尝试从数据库中获取实体时会出错。
这是我的 MembersContext 的代码。我删除了一些属性,但它们只是更多的 DbSet 集合。
public class MembersContext : DbContext
{
public MembersContext(DbContextOptions<MembersContext> options) : base(options)
{ }
public DbSet<Member> Members { get; set; }
public DbSet<FamilyMember> FamilyMembers { get; set; }
public DbSet<Membership> Memberships { get; set; }
...
}
我没有使用上下文工厂,可能是这个问题吗?
【问题讨论】:
-
您的问题/问题到底是什么?您不应该太认真地对待调试视图异常,除非您需要/必须访问此属性/方法。当在调试视图中展开时,Visual Studio 调试器将评估所有属性,因此如果其中一些没有实现,则不一定是坏信号。
-
应该注意,虽然 Oracle 的 MySQL 提供程序比任何东西都具有更多的 alpha 状态,而且 Pomelo 最近更改为“更合法”的提供,因此它不再基于旧的 EF6 提供程序源:@987654322 @
-
感谢@Tseng!问题是,如果我继续通过构造函数,第一次尝试访问任何数据时,我会遇到其他异常。这些更具体一些,特别是数据库中不存在表。所以显然有些地方是错误的,很可能在我的 MembersContext 定义中。我将更新我的问题以显示该代码。
-
在启动过程中,您是否还在调用
context.Database.EnsureCreated()(或context.Database.Migrate(),如果您使用迁移)或其异步变体?没有它,永远不会创建数据库 -
正如我所提到的,我正在使用现有的数据库并且根本不打算使用迁移。我也相当有信心连接字符串是正确的;至少,它可以在服务器资源管理器中访问数据库。
标签: c# mysql asp.net-core entity-framework-core