我有兴趣使用AsNoTracking我的LINQ选择查询来提高性能.我正在使用Code First的Entity Framework 5.
但是,我的所有查询都是使用LINQ Query语法编写的,所有AsNoTracking示例都是使用Method语法显示的.我知道这AsNoTracking是为Method语法创建的,但是如何使用Query语法实现相同的功能呢?
假设我有两个有界的上下文,即Shipping Context和Billing Context.这些背景中的每一个都需要了解客户.
在数据级别,客户由CustomerTbl数据库中的表表示.该表包含描述客户的所有必要列.
CustomerTbl(简化)中的列:
NamePhysicalAddressPaymentMethod该装运情境关注的是Name和PhysicalAddress而计费上下文关注的是Name和PaymentMethod.
在装运背景中,我已对聚合建模Recipient:
Recipient现在有属性/值对的对象Name和PhysicalAddress在结算上下文中,我已对聚合建模Payer:
Payer具有属性/值对的对象Name和PaymentMethod两者Recipient和Payer聚合都完全由上下文边界分隔.他们也有自己的存储库.
是否可以使用相同的"数据库表"来拥有多个聚合(假设它们位于不同的有界上下文中)?
在更多有限的背景下可能需要客户数据.这不意味着每个有界上下文的许多聚合,存储库和工厂实现吗?代码中会有一定程度的冗余.这不会影响可维护性吗?
跨聚合共享属性是否可以接受?一个例子是客户Name财产.这也意味着冗余的验证码?
domain-driven-design aggregateroot repository-pattern onion-architecture bounded-contexts
我们的解决方案中有一个ASP.NET 5 Web应用程序.
通常,我们可以右键单击Cloud Service"角色"项,并从解决方案中的现有项目添加新角色.
但它不能将此项目标识为Web角色:
我们如何在Azure Web角色中托管ASP.NET 5项目?
编辑:我们正在使用Azure SDK 2.7
azure azure-sdk-.net visual-studio-2015 .net-4.6 asp.net-core
在做了一些研究之后,我仍然不确定如何最好地保持与Azure Table Storage的"连接".应该CloudTableClient或CloudTable实例跨请求被重用?
我们在公共的高流量API背后使用Table Storage.我们需要高读取可用性和性能.所有查询都是POINT查询(分区键和行键都可用),响应支付的大小很小(小于1千字节).写性能不是一个大问题.API上的每个请求都可以在几个分区中读取最多10个点查询.
从我的阅读中,我了解到以下内容:
CloudTableClient不是线程安全的,应该为每个事务创建.显然,这不应该在连续重建时妨碍性能.
CloudTable因此,还必须为每个事务创建一个实例.
这些是正确的假设吗?
因此CloudTableClient,我正在重新初始化并CloudTable满足每一项要求.这感觉很浪费.
见实施:
public class EntityStorageComponent : IEntityComponent
{
private CloudStorageAccount storageAccount;
public CloudTable Table
{
get
{
var tableClient = storageAccount.CreateCloudTableClient();
ServicePoint tableServicePoint = ServicePointManager.FindServicePoint(storageAccount.TableEndpoint);
tableServicePoint.UseNagleAlgorithm = false;
tableServicePoint.ConnectionLimit = 100;
var context = new OperationContext();
context.Retrying += (sender, args) =>
{
Debug.WriteLine("Retry policy activated");
};
// Attempt delays: ~200ms, ~200ms, ~200ms
var requestOptions = new TableRequestOptions
{
RetryPolicy = …Run Code Online (Sandbox Code Playgroud) 我需要保留所有遥测,因为我们将其用于分析.
根据这篇文章,我可以运行以下Analytics查询来确定抽样率:
requests
| where timestamp > ago(1d)
| summarize 100/avg(itemCount) by bin(timestamp, 1h)
| render areachart
Run Code Online (Sandbox Code Playgroud)
结果显示一些严重抽样,特别是在白天只保留了约十分之一的项目:
让我感到困惑的是,Azure Portal阻止采样设置为100%:
也许这只反映了摄取采样?自适应采样仍可能在服务器上进行.
如何使用Application Insights的ASP.NET核心库完全禁用采样?(即Microsoft.ApplicationInsights.AspNetCore 1.0.2)
目前,这是我能找到的唯一配置,并且没有任何取样:
var appInsightsConfiguration = new ConfigurationBuilder()
.AddApplicationInsightsSettings(
developerMode: false,
instrumentationKey: Configuration["ApplicationInsights:InstrumentationKey"])
.Build();
services.AddApplicationInsightsTelemetry(appInsightsConfiguration);
Run Code Online (Sandbox Code Playgroud) asp.net-core-mvc azure-application-insights asp.net-core asp.net-core-1.0
有多种方法可以观察任务中抛出的异常.其中一个是在带有OnlyOnFaulted的ContinueWith中:
var task = Task.Factory.StartNew(() =>
{
// Throws an exception
// (possibly from within another task spawned from within this task)
});
var failureTask = task.ContinueWith((t) =>
{
// Flatten and loop (since there could have been multiple tasks)
foreach (var ex in t.Exception.Flatten().InnerExceptions)
Console.WriteLine(ex.Message);
}, TaskContinuationOptions.OnlyOnFaulted);
Run Code Online (Sandbox Code Playgroud)
我的问题:一旦failureTask开始,是否会自动观察异常,或者只有在我触摸'ex.Message时才会观察到异常?
.net c# parallel-processing multithreading task-parallel-library
以下方法可用于将实体集合批量插入为单个事务:
CloudTable.ExecuteBatch(TableBatchOperation batch)
Run Code Online (Sandbox Code Playgroud)
如果在插入期间任何实体失败,则不会从集合中插入任何内容.这仅在插入一个分区时可用.
是否可以跨多个分区执行此类操作?
在Azure之前发布:
在使用Azure之前,我们只有坐在不同环境中的只读配置文件(测试,登台和生产等).在发布期间,所有应用程序文件(无配置文件)都将部署到相关环境中.然后,应用程序文件将读取环境的配置文件,以获取连接字符串和其他特定于环境的详细信息.我认为这是一个非常标准的设置?
在Azure之后发布:
现在我们将Web应用程序移动到Azure Web角色.Web角色使用ServiceConfiguration.Cloud.cscfg和ServiceConfiguration.Local.cscfg文件.
发布到云服务时,需要知道连接字符串.如果我们要发布到测试云服务,则ServiceConfiguration.Cloud.cscfg需要进行相应的编辑.如果我们要发布到临时或生产云服务,则ServiceConfiguration.Cloud.cscfg需要进一步更改.
我更倾向于在开始部署时从连接字符串中抽象开发人员AWAY.这可以防止指向错误环境的错误(这可能会产生巨大的影响).如何才能做到这一点?
我知道可以在Azure管理门户中更改这些配置设置,但是将此步骤包含在发布过程中意味着开发人员需要访问管理门户,这不是一个理想的情况,因为仍有余量错误(加上对管理门户的'开放'访问权限).
更新:
我发现您可以通过添加更多(和重命名)来管理您的服务配置文件:

然后通过一起选择正确的云服务(黑色)和正确的服务配置(红色箭头),开发人员不需要了解配置详细信息:

在部署到云服务时,开发人员仍然存在选择错误服务配置的问题(但是这可能会自动进入脚本以防止这种情况发生?)
我的主要信息是环境类型(蓝色箭头).这对我来说没用.
.net azure azure-web-roles azure-configuration web.config-transform
在域驱动设计中,实体的一个定义特征是它具有身份.
问题:
我无法在实例创建时为实体提供唯一标识.一旦实体被持久化(此值由底层数据库提供),此标识仅由存储库提供.
此时我无法开始使用Guid值.现有数据与int主键值一起存储,我无法在实例化时生成唯一的int.
我的解决方案
代码(所有实体的抽象基类):
public abstract class Entity<IdType>
{
private readonly IdType uniqueId;
public IdType Id
{
get
{
return uniqueId;
}
}
public Entity()
{
uniqueId = default(IdType);
}
public Entity(IdType id)
{
if (object.Equals(id, default(IdType)))
{
throw new ArgumentException("The Id of a Domain Model cannot be the default value");
}
uniqueId = id;
}
public override bool Equals(object obj)
{
if (uniqueId.Equals(default(IdType)))
{
var entity = obj …Run Code Online (Sandbox Code Playgroud) c# domain-driven-design aggregateroot repository-pattern domain-model
据我所知,目标框架dnx451和net451两者都使用桌面.NET Framework 4.5.1.dnx451特别适用于DNX运行时应用程序并支持ASP.NET 5.
如果我们有一个带有ASP.NET 5项目和多个类库的解决方案,那么它们是否都要定位dnx451或只需要定位Web项目dnx451?类库是否只是针对目标net451?