必须将聚合设计为事务性的并最终保持一致性.实体的这种一致性边界有助于管理复杂性
在我们的存储库实现中,我们使用Entity Framework与实际数据库进行交互.从历史上看,我们总是拥有巨大的上下文(跨越数十个表),它们代表数据库中的每个可用表,字段和关系(或者至少在数据库的某个功能区域中).这里的问题是,这个上下文用于数百种不同的事物,并随着系统变大而呈指数级增长,从而导致难以维护的事物.
因此,通常建议应为系统中的每个有界上下文创建单独的DbContexts.Julie Lerman在她的文章" 缩小具有DDD有界上下文的EF模型"中提出了这一点.
如果我们的聚合在事务上是一致的,那么是什么阻止我们更进一步并创建专用上下文来为每个聚合存储库提供服务?
它不是滥交(服务于每个人的需要),而是给出了明确的意图.
当聚合需要改变时,上下文只需要改变.它随着聚合而演变.对于更大的上下文,系统的许多部分可能依赖于上下文的一部分.一次改变可能会危及很多.
只需要在上下文中存在聚合所需的表,字段和关系.通常在处理更大的上下文时,您不会对给定表上的大多数关系或字段感到困扰.
这种方法有缺点.即:
虽然它们可能会以不同的方式建模(取决于它们的用途),但某些数据库表和关系可能需要存在于多个上下文中.
如果使用,代码优先迁移将是棘手的.
这可能被视为过度工程.
任何人都可以提供有关此方法的任何见解吗?是否有一些我忽略的东西?
编辑:
请注意,我们未在域中使用EF数据实体.我们的存储库从这些数据实体中实例化并融合了更丰富的域模型.
我在Visual Studio Online上运行构建时遇到以下错误(使用内置的构建控制器):
C:\ Program Files(x86)\ MSBuild\14.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3962):无法复制"d:\ a\src\MySolution\MyProject\Trunk\packages\Microsoft.Data .Edm.5.6.4\lib \net40\Microsoft.Data.Edm.xml"to"..\Build\bin\Release\Microsoft.Data.Edm.xml".开始在1000毫秒内重试1次.该进程无法访问文件'..\Build\bin\Release\Microsoft.Data.Edm.xml',因为它正由另一个进程使用.
它永远不是同一个文件,但它似乎总是来自packages文件夹的xml或dll.
编辑:我不确定是否值得一提,但我确实有多个工作区和使用此存储库的多个构建定义.
当引用此 ASP.NET github wiki 页面时,它解释了如何使用“Nearest Win”场景丢弃同名(但不同版本)的包:
最近的获胜意味着依赖项解析器更喜欢与应用程序“更接近”的版本,但前提是它们是被拒绝的依赖项的祖先。
给出的示例解释了下图中如何因为“更接近”而Package B 1.0被丢弃:Package B 2.0
这是否意味着Package A现在会使用Package B 2.0?Package B 2.0当然,除非向后兼容,否则这没有任何意义Package B 1.0?
根据语义版本控制,上述包不一定向后兼容。
我正在尝试使用运行我的 xUnit 单元测试vstest.console.exe,但未找到任何测试。
我使用的vstest.console.exe是 Visual Studio 2015,可以在以下位置找到:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\ Microsoft\TestWindow
命令运行:
vstest.console.exe "C:\MyProject\artifacts\bin\UnitTest\Release\dnx451\UnitTest.dll" /TestAdapterPath:"C:\MyProject\packages"
Run Code Online (Sandbox Code Playgroud)
回复:
正在开始测试执行,请稍候...
警告:所提供的来源中没有可用的测试。确保已安装的测试发现器和执行器、平台和框架版本设置合适,然后重试。
我还尝试使用以下 TestAdapterPath 参数,但遇到同样的问题:
/TestAdapterPath:"C:\MyProject\packages\xunit.runner.visualstudio"
/TestAdapterPath:"C:\MyProject\packages\xunit.runner.visualstudio\2.1.0-beta4-build1109"
/TestAdapterPath:"C:\MyProject\packages\xunit.runner.visualstudio\2.1.0-beta4-build1109\build"
/TestAdapterPath:"C:\MyProject\packages\xunit.runner.visualstudio\2.1.0-beta4-build1109\build\_common"
Run Code Online (Sandbox Code Playgroud)
文件project.json:
{
"dependencies": {
"xunit": "2.1.0-beta4-build3109",
"xunit.runner.dnx": "2.1.0-beta4-build134",
"xunit.runner.visualstudio": "2.1.0-beta4-build1109"
},
"commands": {
"test": "xunit.runner.dnx"
},
"frameworks": {
"dnx451": { }
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何运行这些测试?
编辑:使用 DNX beta6 运行时。
有许多关于如何在以前的MVC版本中创建RouteConstraints的教程:
这如何与MVC6一起使用,特别是注册自定义路由约束,因此它可以用在ApiController动作的属性中?
我创建了一个名为NonEmptyGuid的自定义路由约束,它实际上只是确保将非空Guid用作GET操作的参数:
public class NonEmptyGuid : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, IDictionary<string, object> values, RouteDirection routeDirection)
{
if (!values.ContainsKey(routeKey)) return false;
if (values[routeKey].ToString().Equals(Guid.Empty.ToString())) return false;
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
问题: 如何以及在何处为MVC6应用程序注册此自定义RouteConstraint (例如,在WebApi项目中).
c# asp.net asp.net-web-api-routing asp.net-core-mvc asp.net-core
是否可以在触发目标时使用MSBuild中dnu publish的--no-source属性进行调用FileSystemPublish?
MSBuild命令:
/t:Build,FileSystemPublish /p:PublishConfiguration=$(BuildConfiguration) /p:PublishOutputPathNoTrailingSlash=$(build.stagingDirectory)
Run Code Online (Sandbox Code Playgroud)
MSBuild最终调用以下内容:
dnu publish "C:/MyApplication" --out "C:/a/MyApplication" --configuration Release --runtime dnx-clr-win-x86.1.0.0-beta6 --quiet
Run Code Online (Sandbox Code Playgroud)
我想追加--no-source属性.
$geoNear在聚合管道中使用时,我没有得到正确的结果.使用典型的find()查询(使用$near)的相同查询实际上返回正确的结果.
但是,当删除相等条件(打开schedule.key)时,两个查询都返回正确的数据.
$geoNear 使用聚合管道:db.place.aggregate(
[
{
$geoNear: {
spherical: true,
near: { type: "Point", coordinates: [ 18.416145, -33.911973 ] },
distanceField: "dist"
}
},
{
$match: {
"schedule.key": { "$eq": "vo4lRN_Az0uwOkgBzOERyw" }
}
}
])
Run Code Online (Sandbox Code Playgroud)
$near 查找查询:db.place.find(
{
"point" : {
$near: {
type: "Point",
coordinates: [ 18.416145,-33.911973 ]
}
},
"schedule.key" : {
$eq : "vo4lRN_Az0uwOkgBzOERyw"
}
})
Run Code Online (Sandbox Code Playgroud)
此集合中的文档如下所示:
{
"_id" : UUID("da6ccbb1-3c7a-45d7-bc36-a5e6007cd919"),
"schedule" : {
"_id" : UUID("587de5b7-a744-4b28-baa8-e6efb5f7f921"),
"key" : …Run Code Online (Sandbox Code Playgroud) 我正在忙着将我们的ASP.NET Core API从RC1迁移到RC2.
services.AddOptions();
Run Code Online (Sandbox Code Playgroud)
但是我得到以下编译错误:
错误CS0121呼叫是下列方法或属性之间暧昧:"Microsoft.Extensions.DependencyInjection.OptionsServiceCollectionExtensions.AddOptions(Microsoft.Extensions.DependencyInjection.IServiceCollection)"和"Microsoft.Extensions.DependencyInjection.OptionsServiceCollectionExtensions.AddOptions(Microsoft.Extensions.DependencyInjection .IServiceCollection)'TransitApi.Api..NET Framework 4.5.2
这些是完全相同的扩展方法!我已经尝试删除所有软件包并删除锁定文件,但无济于事.
project.json:
{
"title": "MyProject.Api",
"webroot": "wwwroot",
"version": "1.0.0-*",
"dependencies": {
"Microsoft.ApplicationInsights.AspNetCore": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Authorization": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Mvc.Core": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Mvc.Abstractions": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0-rc2-final",
"Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc2-final",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Abstractions": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Http": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Http.Abstractions": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
"Newtonsoft.Json": "8.0.3",
"WindowsAzure.Storage": "7.0.0",
"Microsoft.AspNetCore.Mvc.Formatters.Json": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Cors": "1.0.0-rc2-final"
},
"frameworks": {
"net452": { } …Run Code Online (Sandbox Code Playgroud) 是否有与MVC6兼容的版本WebTelemetryInitializerBase可以与ASP.NET Core(在完整的.NET Framework上)一起使用?
在这里看到我的问题,在这里我问如何进入HttpContext我的临时初始化器。不幸的是,我没有指定我使用的是MVC 6,因此没有System.Web.HttpContext。
asp.net-core-mvc azure-application-insights asp.net-core asp.net-core-1.0
我希望在使用 C# SDK 查询 MongoDB 时能够投影到另一种类型。
例如,下面我想使用 的构建器过滤器(或 LINQ 表达式)查询集合MyType,但我想将结果投影到MySubType。
var mySubTypes = Database
.GetCollection<MyType>("MyCollection")
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, documentId))
.ProjectTo<MySubType>() // Project to another type??
.ToList();
Run Code Online (Sandbox Code Playgroud)
人们可以想象MySubType它是 的子集MyType,用继承表示:
public class MyType : MySubType
{
[BsonElement("documents")]
public List<string> Documents { get; set; }
}
public class MySubType
{
[BsonElement("name")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我为什么要这样做?
因为Documents数组非常大并且纯粹在数据库引擎内查询(即过滤)期间使用。检索和序列化该数组将是不必要的成本。