将数据访问逻辑移动到 ASP.Net 核心 1.0 测试版 (DNX) 中的另一个项目
Move Data Access Logic to another project in ASP.Net Core 1.0 beta version (DNX)
编辑 :
在最初的问题中,我提到了 ASP.NET5。它不针对计划于 2021 年发布的 .Net Classic / .Net Core 的未来版本。问题在 .Net Core 1.0 的第一个测试版发布时被问到。此时命名为ASP.Net5/.Net vNext/DNX.
因此,在原问题中,请理解版本号如下:
- ASP.Net 5 => ASP.Net 核心 1.0 测试版
- ASP.NET MVC 6 => ASP.NET 核心 MVC 1.0 测试版
- Entity Framework 7 => Entity Framework 核心 1.0 测试版
我正在 ASP.Net 5 和 ASP.NET MVC 6 中开始一个新项目,运行 在 DNX 上,并从 Visual Studio 的默认 MVC 6 模板开始2015. 我的数据层使用 Entity Framework 7 代码优先方法。
然后我的 Web 应用程序项目采用新方法:xproj 文件,引用不同的 json 配置文件(项目、解决方案、npm 和 bower 管理器)。
作为长期的 .Net 开发人员,我总是在 .Net Assembly 项目(或多个)中拥有我的数据访问层,然后引用到我的每个客户端项目(例如:Web 应用程序、Web API、控制台应用程序或单元测试项目)。
我的问题是:
- 还有可能吗(我猜是)
- 推荐的方法是什么(汇编项目或内部 nuget 包)
- 如何设置(应该使用哪种项目模板来处理 xproj 网络应用程序)
这是可能的,但你必须解决这个问题:https://github.com/aspnet/dnx/issues/3047
您必须通过将此添加到 Startup 的配置方法来删除任何本地化支持:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//...
var localizationOptions = new RequestLocalizationOptions()
{
SupportedCultures = new List<CultureInfo> { new CultureInfo("") },
SupportedUICultures = new List<CultureInfo> { new CultureInfo("") }
};
var invariantCulture = new RequestCulture(new CultureInfo(""), new CultureInfo(""));
app.UseRequestLocalization(localizationOptions, invariantCulture);
//...
}
否则您将遇到此 FileNotFoundException:
FileNotFoundException: Couldn't find file EntityFramework.resources.
at System.Reflection.RuntimeAssembly.InternalGetSatelliteAssembly(String name, CultureInfo culture, Version version, Boolean throwOnFileNotFound, StackCrawlMark& stackMark)
at System.Resources.ManifestBasedResourceGroveler.GetSatelliteAssembly(CultureInfo lookForCulture, StackCrawlMark& stackMark)
按照这个 SO 问题 () - 顺便说一句,这与我的问题很接近 - 我决定尝试使用默认方法,即“Class 库(包)”项目。
我必须更改对运行时的引用才能使其正常工作:
- 我的主要 project.json 参考框架
dnx451
和 dnxcore50
.
- Class 库(包)创建了一个带有框架
net451
和 dotnet5.4
. 的 project.json 文件
我不得不将后者更改为 dnx451
和 dnxcore50
以使一切正常。
这仍然是一个无法解释的解决方案,因为据我所知,dnx451
和 dnxcore50
现在应该替换为 dnx451
和 dnxcore50
,但我不得不做相反的事情,否则我现有的参考文献(包括 "EntityFramework.Commands": "7.0.0-rc1-final"
)将被破坏。
无论如何该解决方案都有效,所以对于那些有兴趣在共享项目中分离他们的 EF 逻辑的人,我建议阅读这篇文章,它解释了如何在 [=45] 中启用 ef 命令(迁移和数据库更新) =] 图书馆项目:http://www.jerriepelser.com/blog/moving-entity-framework-7-models-to-external-project
编辑 :
在最初的问题中,我提到了 ASP.NET5。它不针对计划于 2021 年发布的 .Net Classic / .Net Core 的未来版本。问题在 .Net Core 1.0 的第一个测试版发布时被问到。此时命名为ASP.Net5/.Net vNext/DNX.
因此,在原问题中,请理解版本号如下:
- ASP.Net 5 => ASP.Net 核心 1.0 测试版
- ASP.NET MVC 6 => ASP.NET 核心 MVC 1.0 测试版
- Entity Framework 7 => Entity Framework 核心 1.0 测试版
我正在 ASP.Net 5 和 ASP.NET MVC 6 中开始一个新项目,运行 在 DNX 上,并从 Visual Studio 的默认 MVC 6 模板开始2015. 我的数据层使用 Entity Framework 7 代码优先方法。
然后我的 Web 应用程序项目采用新方法:xproj 文件,引用不同的 json 配置文件(项目、解决方案、npm 和 bower 管理器)。
作为长期的 .Net 开发人员,我总是在 .Net Assembly 项目(或多个)中拥有我的数据访问层,然后引用到我的每个客户端项目(例如:Web 应用程序、Web API、控制台应用程序或单元测试项目)。
我的问题是:
- 还有可能吗(我猜是)
- 推荐的方法是什么(汇编项目或内部 nuget 包)
- 如何设置(应该使用哪种项目模板来处理 xproj 网络应用程序)
这是可能的,但你必须解决这个问题:https://github.com/aspnet/dnx/issues/3047
您必须通过将此添加到 Startup 的配置方法来删除任何本地化支持:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//...
var localizationOptions = new RequestLocalizationOptions()
{
SupportedCultures = new List<CultureInfo> { new CultureInfo("") },
SupportedUICultures = new List<CultureInfo> { new CultureInfo("") }
};
var invariantCulture = new RequestCulture(new CultureInfo(""), new CultureInfo(""));
app.UseRequestLocalization(localizationOptions, invariantCulture);
//...
}
否则您将遇到此 FileNotFoundException:
FileNotFoundException: Couldn't find file EntityFramework.resources.
at System.Reflection.RuntimeAssembly.InternalGetSatelliteAssembly(String name, CultureInfo culture, Version version, Boolean throwOnFileNotFound, StackCrawlMark& stackMark)
at System.Resources.ManifestBasedResourceGroveler.GetSatelliteAssembly(CultureInfo lookForCulture, StackCrawlMark& stackMark)
按照这个 SO 问题 (
我必须更改对运行时的引用才能使其正常工作:
- 我的主要 project.json 参考框架
dnx451
和dnxcore50
. - Class 库(包)创建了一个带有框架
net451
和dotnet5.4
. 的 project.json 文件
我不得不将后者更改为 dnx451
和 dnxcore50
以使一切正常。
这仍然是一个无法解释的解决方案,因为据我所知,dnx451
和 dnxcore50
现在应该替换为 dnx451
和 dnxcore50
,但我不得不做相反的事情,否则我现有的参考文献(包括 "EntityFramework.Commands": "7.0.0-rc1-final"
)将被破坏。
无论如何该解决方案都有效,所以对于那些有兴趣在共享项目中分离他们的 EF 逻辑的人,我建议阅读这篇文章,它解释了如何在 [=45] 中启用 ef 命令(迁移和数据库更新) =] 图书馆项目:http://www.jerriepelser.com/blog/moving-entity-framework-7-models-to-external-project