小编Dav*_*New的帖子

AsNoTracking使用LINQ Query语法而不是Method语法

我有兴趣使用AsNoTracking我的LINQ选择查询来提高性能.我正在使用Code First的Entity Framework 5.

但是,我的所有查询都是使用LINQ Query语法编写的,所有AsNoTracking示例都是使用Method语法显示的.我知道这AsNoTracking是为Method语法创建的,但是如何使用Query语法实现相同的功能呢?

c# linq entity-framework ef-code-first

12
推荐指数
1
解决办法
6599
查看次数

有界的上下文实现和设计

假设我有两个有界的上下文,即Shipping ContextBilling Context.这些背景中的每一个都需要了解客户.

在数据级别,客户由CustomerTbl数据库中的表表示.该表包含描述客户的所有必要列.

CustomerTbl(简化)中的列:

  • Name
  • PhysicalAddress
  • PaymentMethod

装运情境关注的是NamePhysicalAddress计费上下文关注的是NamePaymentMethod.

装运背景中,我已对聚合建模Recipient:

  • Recipient现在有属性/值对的对象NamePhysicalAddress

结算上下文中,我已对聚合建模Payer:

  • Payer具有属性/值对的对象NamePaymentMethod

两者RecipientPayer聚合都完全由上下文边界分隔.他们也有自己的存储库.

问题:

  1. 是否可以使用相同的"数据库表"来拥有多个聚合(假设它们位于不同的有界上下文中)?

  2. 在更多有限的背景下可能需要客户数据.这不意味着每个有界上下文的许多聚合,存储库和工厂实现吗?代码中会有一定程度的冗余.这不会影响可维护性吗?

  3. 跨聚合共享属性是否可以接受?一个例子是客户Name财产.这也意味着冗余的验证码?

domain-driven-design aggregateroot repository-pattern onion-architecture bounded-contexts

12
推荐指数
1
解决办法
1822
查看次数

ASP.NET 5 Web应用程序作为Azure Web角色?

我们的解决方案中有一个ASP.NET 5 Web应用程序.

通常,我们可以右键单击Cloud Service"角色"项,并从解决方案中的现有项目添加新角色.

但它不能将此项目标识为Web角色:

在解决方案中添加Web角色项目...

我们如何在Azure Web角色中托管ASP.NET 5项目?

编辑:我们正在使用Azure SDK 2.7

azure azure-sdk-.net visual-studio-2015 .net-4.6 asp.net-core

12
推荐指数
1
解决办法
1583
查看次数

每个事务创建CloudTableClient和CloudTable的新实例

在做了一些研究之后,我仍然不确定如何最好地保持与Azure Table Storage的"连接".应该CloudTableClientCloudTable实例跨请求被重用?

我们在公共的高流量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)

azure azure-storage azure-table-storage

12
推荐指数
1
解决办法
2027
查看次数

使用ASP.NET Core库禁用Application Insights采样

我需要保留所有遥测,因为我们将其用于分析.

根据这篇文章,我可以运行以下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%:

Azure门户洞察

也许这只反映了摄取采样?自适应采样仍可能在服务器上进行.

如何使用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

12
推荐指数
1
解决办法
4933
查看次数

在ContinueWith中观察任务异常

有多种方法可以观察任务中抛出的异常.其中一个是在带有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

11
推荐指数
1
解决办法
1万
查看次数

Azure表存储批处理跨多个分区插入?

以下方法可用于将实体集合批量插入为单个事务:

CloudTable.ExecuteBatch(TableBatchOperation batch)
Run Code Online (Sandbox Code Playgroud)

如果在插入期间任何实体失败,则不会从集合中插入任何内容.这仅在插入一个分区时可用.

是否可以跨多个分区执行此类操作?

c# azure azure-storage azure-table-storage

11
推荐指数
1
解决办法
3890
查看次数

跨环境的Azure Web角色配置设置

在Azure之前发布:

在使用Azure之前,我们只有坐在不同环境中的只读配置文件(测试,登台和生产等).在发布期间,所有应用程序文件(无配置文件)都将部署到相关环境中.然后,应用程序文件将读取环境的配置文件,以获取连接字符串和其他特定于环境的详细信息.我认为这是一个非常标准的设置?

在Azure之后发布:

现在我们将Web应用程序移动到Azure Web角色.Web角色使用ServiceConfiguration.Cloud.cscfgServiceConfiguration.Local.cscfg文件.

发布到云服务时,需要知道连接字符串.如果我们要发布到测试云服务,则ServiceConfiguration.Cloud.cscfg需要进行相应的编辑.如果我们要发布到临时或生产云服务,则ServiceConfiguration.Cloud.cscfg需要进一步更改.

我更倾向于在开始部署时从连接字符串中抽象开发人员AWAY.这可以防止指向错误环境的错误(这可能会产生巨大的影响).如何才能做到这一点?

我知道可以在Azure管理门户中更改这些配置设置,但是将此步骤包含在发布过程中意味着开发人员需要访问管理门户,这不是一个理想的情况,因为仍有余量错误(加上对管理门户的'开放'访问权限).

更新:

我发现您可以通过添加更多(和重命名)来管理您的服务配置文件:

在此输入图像描述

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

在此输入图像描述

在部署到云服务时,开发人员仍然存在选择错误服务配置的问题(但是这可能会自动进入脚本以防止这种情况发生?)

我的主要信息是环境类型(蓝色箭头).这对我来说没用.

.net azure azure-web-roles azure-configuration web.config-transform

11
推荐指数
1
解决办法
4285
查看次数

DDD:持久化之前的实体身份

在域驱动设计中,实体的一个定义特征是它具有身份.

问题:

我无法在实例创建时为实体提供唯一标识.一旦实体被持久化(此值由底层数据库提供),此标识仅由存储库提供.

此时我无法开始使用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

11
推荐指数
4
解决办法
5538
查看次数

在类库项目中定位框架dnx451或net451

据我所知,目标框架dnx451net451两者都使用桌面.NET Framework 4.5.1.dnx451特别适用于DNX运行时应用程序并支持ASP.NET 5.

如果我们有一个带有ASP.NET 5项目和多个类库的解决方案,那么它们是否都要定位dnx451或只需要定位Web项目dnx451?类库是否只是针对目标net451

visual-studio-2015 dnx asp.net-core

11
推荐指数
1
解决办法
5588
查看次数