小编mar*_*ker的帖子

DTO模式+延迟加载+实体框架+ ASP.Net MVC +自动映射器

首先,抱歉对于冗长的问题,但我必须提供一些基本信息.

我们正在创建一个使用ASP.net MVC,JQuery模板,实体框架,WCF的应用程序,我们使用POCO作为我们的域层.在我们的应用程序中,有一个WCF服务层与ASP.net MVC应用程序交换数据,它使用从WCF到MVC的数据传输对象(DTO).

此外,在我们的WCF服务层中转换Domain-TO-DTO时,应用程序使用AutoMapper在实体框架中使用延迟加载.

我们的后端架构如下(WCF服务 - >管理器 - >存储库 - >实体框架(POCO))

在我们的应用程序中,我们不使用View Models,因为我们不想要另一个MVC应用程序的映射层,我们只使用DTO作为View Models.

通常,我们有针对域的Normal和Lite DTO,例如Customer,CustomerLite等(Lite对象具有少于Normal的属性).

现在我们在DTO方面遇到了一些困难,因为我们的DTO结构变得越来越复杂,当我们认为可维护性(使用DTO的一般分层结构)时,我们失去了性能.

例如,

我们有Customer View页面和DTO层次结构,如下所示

 public class CustomerViewDetailsDTO
 {
   public CustomerLiteDto Customer{get;set;}
   public OrderLiteDto Order{get;set;}
   public AddressLiteDto Address{get;set;}
 }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们不希望OrderLiteDto的某些字段用于此视图.但是其他一些视图需要该字段,因此为了便于我们使用该结构.

在Auto Mapping中,我们映射CustomerViewDetailsDTO,我们将从Lazy Loading(实体框架)获取其他数据(特定视图不需要).

我的问题:

  1. 在考虑可维护性的同时,我们是否可以使用任何机制来提高性能?

  2. 是否可以使用Automapper为相同的DTO提供更多基于地图视图的映射功能?

asp.net-mvc entity-framework lazy-loading dto automapper

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

在单独的项目和单独的命名空间中组织代码

我在.net c#应用程序中工作,该应用程序包含2个客户端和服务器解决方案.在服务器端,有80多个项目用于分隔以下建筑图层,

  • 基础设施层
  • 集成层(外部系统)
  • 域层
  • 存储库层
  • 经理层
  • 服务层

此外,几乎每个层都有测试项目.现在,解决方案的构建时间需要2到3分钟,许多开发人员(包括我:))觉得我们需要解决这个问题.

因此,提出的解决方案是通过合并项目来减少项目数量.在我看来,这可能是一个很好的解决方案,可以最大限度地缩短构建时间,我们可以实现我们想要的目标.

提出的解决方案是我们将项目合并为3个区域,例如一个用于生产代码的库,一个用于测试代码的库,一个用于部署项目(WCF主机等)以及通过分隔命名空间在同一项目中逻辑划分的层.

但是,我担心的是

  1. 这些分离是否有利于可维护性?为每个命名空间appox提供更多类的hundread.
  2. 如果我们有共同的功能,如助手,我们把它们放在哪里?

有没有其他方法来分层解决方案?

.net c# architecture

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

如何使用Moq模拟函数中的谓词

我想模拟使用Moq期望谓词的Find方法:

public PurchaseOrder FindPurchaseOrderByOrderNumber(string purchaseOrderNumber)
    {
        return purchaseOrderRepository.Find(s => s.PurchaseOrderNumber ==    purchaseOrderNumber).FirstOrDefault();
    }
Run Code Online (Sandbox Code Playgroud)

我的存储库方法

IList<TEntity> Find(Func<TEntity, bool> where);
Run Code Online (Sandbox Code Playgroud)

我使用了以下测试方法

[TestMethod]
  public void CanGetPurchaseOrderByPurchaseOrderNumber()
 {

      _purchaseOrderMockRepository.Setup(s => s.Find(It.IsAny<Func<PurchaseOrder, bool>>()).FirstOrDefault())
          .Returns((Func<PurchaseOrder, bool> expr) => FakeFactory.GetPurchaseOrder());

      _purchaseOrderService.FindPurchaseOrderByOrderNumber("1111");


 }
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

ServicesTest.PurchaseOrderServiceTest.CanGetPurchaseOrderByPurchaseOrderNumber抛出异常:System.NotSupportedException:Expression引用一个不属于模拟对象的方法:s => s.Find(It.IsAny()).FirstOrDefault

我该如何解决这个问题?

c# moq

9
推荐指数
1
解决办法
7211
查看次数

是Entity Framework 4.0中需要的工作单元模式

我们如何使用工作单元模式与(Entity Framework 4.1)代码第一种方法?据我所知,EF 4.1内部实现了工作单元和存储库模式.如果我们使用自我跟踪和数据传输对象模式,我们还需要实现工作单元模式吗?

entity-framework-4.1

8
推荐指数
2
解决办法
6482
查看次数

在HTTPS上运行docker服务

当前,我通过使用以下文件运行一个简单的Docker容器。

Docker文件

FROM microsoft/aspnet:4.7.1
WORKDIR /inetpub/wwwroot
EXPOSE 80
COPY index.html .
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '3.4'

services:

testapp:
  image: mytestapp:${TAG:-latest}
build:
  context: .
  dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)

docker-compose.override.yml

version: '3.4'

services:
  testapp:
   ports:
    - "9091:80"
Run Code Online (Sandbox Code Playgroud)

我使用Windows映像通过以下命令创建容器,并且可以通过http:// localhost:9091 /访问它。

docker-compose -f docker-compose.yml -f docker-compose.override.yml build
Run Code Online (Sandbox Code Playgroud)

我想使用HTTPS而非http访问我的应用程序。

我需要遵循哪些步骤?

docker docker-compose docker-swarm

8
推荐指数
2
解决办法
9046
查看次数

当 .net 4.8 已经安装时,是否可以在我的机器上安装 .net 4.7 版本?

我的机器上有以下 .net 版本。我开始研究一个目标框架为 4.7 的 .net 项目。当我尝试安装 .net 4.7 时,出现此错误“此计算机上已安装 .NET Framework 4.7 或更高版本”。

当 .net 4.8 已经安装时,是否可以在我的机器上安装 .net 4.7 版本?

PSChildName                      Version        Release
-----------                      -------        -------
v2.0.50727                       2.0.50727.4927
v3.0                             3.0.30729.4926
Windows Communication Foundation 3.0.4506.4926
Windows Presentation Foundation  3.0.6920.4902
v3.5                             3.5.30729.4926
Client                           4.8.03761      528049
Full                             4.8.03761      528049
Client                           4.0.0.0
Run Code Online (Sandbox Code Playgroud)

.net .net-4.7 .net-4.8

8
推荐指数
1
解决办法
6759
查看次数

从实体框架到MongoDB的端口

我正计划从实体框架4.0移植到MongoDb.有哪些最佳实践可以最大限度地减少影响,因为项目具有社交网络功能,因此维护一个复杂的关系数据库.因此,如果我们使用关系数据库,性能应该是一个问题.

我们在项目中使用了域层(使用POCO),存储库模式和DTO映射.此外,决策的优缺点是什么?同时,它如何影响我的域层实现?

poco relational-database mongodb nosql entity-framework-4.1

5
推荐指数
1
解决办法
708
查看次数

Kestrel 服务器与 HTTP.sys

在 Dotnet 核心中,有两个内置服务器 Kestrel 和 HTTP.sys。

我想知道这两个服务器之间的区别,以及在性能、可靠性、微服务友好等方面何时使用特定服务器。

答案:来自 Microsoft 官方文档的Kestrel 与 HTTP.sys

performance .net-core asp.net-core

4
推荐指数
1
解决办法
2959
查看次数

ASP.net MVC中的全球化(每个视图与域的资源文件)

在ASP.net MVC全球化方面,保留资源文件的最佳做法是什么?

例如,如果我们尝试保留域的资源文件,即order.resx,customer.resx等,我们有订单处理系统

或者我们可以尝试保持每个视图的资源文件,即OrderProcessingView.resx,CustomerView.resx等

常用字符串,如"添加","编辑","删除"可以使用common.resx文件处理.

或者还有其他方法来保存资源文件吗?

我们也在使用一些客户端渲染(Jquery模板,Kendo模板).

globalization asp.net-mvc-3

3
推荐指数
1
解决办法
1377
查看次数

更新对象图时实体框架的断开行为

我目前正在使用一个使用以下技术的项目.

  1. ASP.net MVC - 表示层
  2. 数据服务层 - (WCF)
  3. 具有自动映射器的数据传输对象(DTO)层
  4. 域层(POCO,代码优先实体框架)
  5. 存储库层+实体框架4.3 + DbContext.

我们使用DTO使用自动映射器转换Domain对象,并使用WCF服务发送到前端.

此外,我们在WCF层为每个请求创建基于请求的DBContext,并且我们的WCF服务上下文由客户端DTO中的Per Call和No Tracking启用构建,并且它完全断开连接.

我们还有以下对象图.

public class User : BaseEntity
    {
        public virtual Identity Identity { get; set; }

        public string UserName { get; set; }

        public string Password { get; set; }

        public int IdentityId { get; set; }

        public virtual IList<Group> Groups{ get; set; }
    }



 public class Identity : BaseEntity
    {
        public string FirstName { get; set; }

        public string LastName { get; set; …
Run Code Online (Sandbox Code Playgroud)

wcf disconnected-environment entity-framework-4.1 asp.net-mvc-3

2
推荐指数
2
解决办法
3778
查看次数

Windows上的Windows容器和Linux Kubernetes集群

我对Kubernetes世界有点新意.在我的项目中,我们计划在短期内使用Windows容器(.net完整框架)和Linux容器(.net核心).

我们有一个由基础架构团队提供的K8集群,集群中包含Linux和Windows节点.我只是想知道我的Windows容器将如何仅部署到K8集群中的Windows节点.它是由K8处理还是我需要其他什么?

kubernetes windows-container kubernetes-cluster

2
推荐指数
1
解决办法
1634
查看次数

ASP.net MVC 3在JQuery模式弹出问题中不引人注意的客户端验证

当我尝试在应用程序中实现ASP.net MVC 3 Unobtrusive Client Validations时,呈现的html不会生成由JQuery生成的span标记.

我只有以下渲染html,我使用JQuery模态弹出窗口作为我的部分视图的容器.

<input data-val="true" data-val-required="The City field is required." id="City" name="City" type="text" value="Seattle" />
Run Code Online (Sandbox Code Playgroud)

但是,当我使用不显眼的客户端验证而没有弹出JQuery Modal弹出时,它在同一个应用程序中正常工作如下.

<div class="editor-field">
  <input data-val="true" data-val-required="The City field is required." id="City" name="City" type="text" value="Seattle" />
  <span class="field-validation-valid" data-valmsg-for="City" data-valmsg-replace="true"></span>
</div>
Run Code Online (Sandbox Code Playgroud)

当我在JQuery Modal Popup中使用Unobtrusive Client验证时,是否需要实现任何功能?

JQuery Popup Code

 $(document).ready(function () {
        $('#actionPanelDialogs div').dialog({
            autoOpen: false,
            modal: true,
            width: 700,
            appendToBody: true
        });


        $('#actions a').click(function (event) {
            event.stopPropagation();
            event.preventDefault();
            var link = $(this);
            var action = link.attr('href');
            var dialogDivId = link.attr('rel');

            var …
Run Code Online (Sandbox Code Playgroud)

jquery unobtrusive-validation asp.net-mvc-3

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