首先,抱歉对于冗长的问题,但我必须提供一些基本信息.
我们正在创建一个使用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(实体框架)获取其他数据(特定视图不需要).
我的问题:
在考虑可维护性的同时,我们是否可以使用任何机制来提高性能?
是否可以使用Automapper为相同的DTO提供更多基于地图视图的映射功能?
我在.net c#应用程序中工作,该应用程序包含2个客户端和服务器解决方案.在服务器端,有80多个项目用于分隔以下建筑图层,
此外,几乎每个层都有测试项目.现在,解决方案的构建时间需要2到3分钟,许多开发人员(包括我:))觉得我们需要解决这个问题.
因此,提出的解决方案是通过合并项目来减少项目数量.在我看来,这可能是一个很好的解决方案,可以最大限度地缩短构建时间,我们可以实现我们想要的目标.
提出的解决方案是我们将项目合并为3个区域,例如一个用于生产代码的库,一个用于测试代码的库,一个用于部署项目(WCF主机等)以及通过分隔命名空间在同一项目中逻辑划分的层.
但是,我担心的是
有没有其他方法来分层解决方案?
我想模拟使用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
我该如何解决这个问题?
我们如何使用工作单元模式与(Entity Framework 4.1)代码第一种方法?据我所知,EF 4.1内部实现了工作单元和存储库模式.如果我们使用自我跟踪和数据传输对象模式,我们还需要实现工作单元模式吗?
当前,我通过使用以下文件运行一个简单的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访问我的应用程序。
我需要遵循哪些步骤?
我的机器上有以下 .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) 我正计划从实体框架4.0移植到MongoDb.有哪些最佳实践可以最大限度地减少影响,因为项目具有社交网络功能,因此维护一个复杂的关系数据库.因此,如果我们使用关系数据库,性能应该是一个问题.
我们在项目中使用了域层(使用POCO),存储库模式和DTO映射.此外,决策的优缺点是什么?同时,它如何影响我的域层实现?
在 Dotnet 核心中,有两个内置服务器 Kestrel 和 HTTP.sys。
我想知道这两个服务器之间的区别,以及在性能、可靠性、微服务友好等方面何时使用特定服务器。
答案:来自 Microsoft 官方文档的Kestrel 与 HTTP.sys。
在ASP.net MVC全球化方面,保留资源文件的最佳做法是什么?
例如,如果我们尝试保留域的资源文件,即order.resx,customer.resx等,我们有订单处理系统
或者我们可以尝试保持每个视图的资源文件,即OrderProcessingView.resx,CustomerView.resx等
常用字符串,如"添加","编辑","删除"可以使用common.resx文件处理.
或者还有其他方法来保存资源文件吗?
我们也在使用一些客户端渲染(Jquery模板,Kendo模板).
我目前正在使用一个使用以下技术的项目.
我们使用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
我对Kubernetes世界有点新意.在我的项目中,我们计划在短期内使用Windows容器(.net完整框架)和Linux容器(.net核心).
我们有一个由基础架构团队提供的K8集群,集群中包含Linux和Windows节点.我只是想知道我的Windows容器将如何仅部署到K8集群中的Windows节点.它是由K8处理还是我需要其他什么?
当我尝试在应用程序中实现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) .net ×2
c# ×2
.net-4.7 ×1
.net-4.8 ×1
.net-core ×1
architecture ×1
asp.net-core ×1
asp.net-mvc ×1
automapper ×1
docker ×1
docker-swarm ×1
dto ×1
jquery ×1
kubernetes ×1
lazy-loading ×1
mongodb ×1
moq ×1
nosql ×1
performance ×1
poco ×1
wcf ×1