我正在构建一个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馆藏之一,使用会员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; }
...
}
我没有使用上下文工厂,可能是问题吗?
答案 0 :(得分:1)
嗯,这是一个令人沮丧的过程,但我终于把它全部整理好了。非常感谢@Tseng的问题和评论,这有助于推动我朝着正确的方向前进。
首先,我转而使用Pomelo MySQL提供程序。官方MySQL提供程序是预发布的,但我认为至少可以开始这个新项目。截至今天,情况并非如此。 (Sapient Guardian似乎也有一个坚实的提供者,但我不需要尝试它。)
其次,我意识到我的对象上下文类有些不对,而且它是我问题的根源。所以我回去让脚手架上班。我尝试了很多东西,但这就是我的project.json文件的依赖项部分的相关部分最终的结果:
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Design": "1.1.0",
"Pomelo.EntityFrameworkCore.MySql": "1.1.1-prerelease-10000",
"Pomelo.Data.MySql": "1.0.0",
"Pomelo.EntityFrameworkCore.MySql.Design": "1.1.1-prerelease-10000" },
这似乎是脚手架和迁移所需的所有软件包,尽管我没有使用迁移。我没有需要在文件的工具部分添加任何内容。
然后,此命令在Visual Studio 2015中的程序包管理器控制台中起作用:
Scaffold-DbContext "<connection string>" Pomelo.EntityFrameworkCore.MySql -OutputDir Models
瞧!正确的对象上下文以及实体类。 (我希望dotnet ef命令也能正常工作,但没有尝试过。)
之后,我遇到了一些问题&#34;无法转换类型&#39; System.String&#39;输入&#39; System.Byte&#39;。&#34;一个实体对象中的错误。结果是因为提供程序(或者MySQL连接器)在.NET Core中的char字段和字符串存在一些问题。我将这些字段更改为varchar,一切都很好。