所以我有一个EF应用程序工作得很好,但它是胖客户端,我想要基于服务并使用Azure和MS的Core 2框架。我开始构建Web API。测试它是否有效,它确实很棒。现在让我们添加对使用EF的炸弹数据库的引用。哎呀忘了通过NuGet将EF添加到新项目中,这样做。它继续告诉我它找不到我对连接字符串的引用。好的,所以我将它在appsettings.json中连接到本地实例数据库,就像这样(从已经在WPF客户端项目中工作的内容复制):
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
},
"ConnectionStrings": {
"ExpensesEntities": "metadata=res://*/Expenses.csdl|res://*/Expenses.ssdl|res://*/Expenses.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=Expenses;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
}
}
我改变了我的创业公司:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddScoped(_ => new MoneyEntry.DataAccess.ExpensesEntities());
}
我可以看到它试图了解我的背景并打破说法
'FileNotFoundException: Could not load file or assembly
'System.Configuration.ConfigurationManager,
Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
The system cannot find the file specified.'
然而,它正在打破EF上下文的这一部分
public ExpensesEntities()
: base("name=ExpensesEntities")
{
}
所以我非常确定我只需要以正确的顺序获得连接字符串的引用,并且我在放置连接字符串或某种类型的配置加载的地方搞错了。我正在关注这个帖子:https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings
我的另一个问题是我可以混合EF框架吗?我在EF 6.1.3中编写了数据访问层,我刚刚升级到6.2,但我知道.NET Core有自己的库。我可以将EF.NET Core与EF.NET Framework混合使用吗?或者我应该尝试在Core中重写我的DAL吗?无论是什么,它似乎都不喜欢它,我可能只是试着看看我是否可以从头开始添加一个自包含的模型,看看它是如何工作的。但我想要问一下,看看人们是否有在新的.NET Core 2上混合框架的经验。
编辑11-15-17 好的,所以关注此链接https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6#handle-connection-strings会有所帮助。然而,他们正在做一个MVC网站,而不仅仅是一个API,假设代码第一个方法,而且你想要依赖注入。为了简化,你可以先用数据库做这个,然后让appsettings识别EF连接字符串吗?在过去,您只需制作另一个项目,将您的EF部分复制并粘贴到新的应用程序配置中,这样就可以了。由于ASP.NET Core 2使用appsettings,我试图做一个更简单的连接字符串,如:
"Expenses": "Server=.;Database=Expenses;Trusted_Connection=True;MultipleActiveResultSets=true"
我使用了一个最简单的表,它只有一个Id int属性和一个字符串Description属性。然后当我点击一个断点时试图获取数据就会轰炸加载控制器:
var data = await _context.tdType.ToListAsync();
return View(data);
并假设我需要定义一个密钥并首先使用代码。我是否认为EF Core无法处理模型第一行为,我需要装饰使用Code第一种方法生成的POCO?如果是这样,我可能需要首先使用代码重新创建我的整个EF,并考虑如何使用它来处理过程和视图。
我认为理解这一点的关键是我使用的这个模型有视图,函数和过程。从我所知的最初的代码开始,您可以更新DbSet对象的映射选项以覆盖Insert,Update和Delete选项。但是与表格没有直接关系但是多个操作的视图,函数和过程实际上是一个谜。可能是EF Core的功能不够全面。但出于这个原因,我认为小猪支持现有的EF 6.2会解决这个问题。
答案 0 :(得分:3)
您无法直接在.Net Core中使用EF 6上下文,来自the docs:
您不能在ASP.NET Core项目中放置EF6上下文,因为.NET Core项目不支持EF6命令的所有功能,例如Enable-Migrations需要。
但是,您可以使用另一个程序集使用EF 6:
在ASP.NET Core应用程序中使用Entity Framework 6的推荐方法是将EF6上下文和模型类放在面向完整框架的类库项目中
但请注意,它实际上会使您的.Net Core项目依赖于完整的.Net框架,因此它不再是跨平台的。
如果由于跨平台功能而不打算使用.Net核心,并且您已经在EF 6代码中投入了大量资金,那么您可能会考虑创建aps.net完整框架web api服务,以便您可以重写从胖客户端到瘦客户端/ web api架构的应用程序。
答案 1 :(得分:0)
简而言之,EF Core 2.1还没有为生产做好准备,因为它没有很多主要功能,如:
多对多关系:https://github.com/aspnet/EntityFrameworkCore/issues/1368
延迟加载:https://github.com/aspnet/EntityFrameworkCore/issues/3797
...
我们尝试在新项目中使用EF Core 2.1,但它对我们来说效果不佳。
我认为你应该仔细检查路线图和问题清单:
Road map
Issue list
另一种选择是使用OrmLite或Dapper:
https://github.com/ServiceStack/ServiceStack.OrmLite
https://github.com/StackExchange/Dapper
我知道OrmLite和Dapper并不是您正在寻找的东西,但那些是目前网络核心最稳定的库。我们已经完成了两个项目,一个是精巧的,另一个是OrmLite 希望这有帮助。
答案 2 :(得分:-1)
您可以使用最新的EF在经典的.net框架上创建新的lib项目。之后的用例“CodeFirst from Database”用于从数据库创建实体和dbcontext类。将生成的代码移动到新的.netcore或.netstandart项目。也许dbcontext需要一些更改,添加连接字符串。有用。当我将旧项目迁移到新的.netcore项目时,我做到了。祝你好运))