Tag: dto

entity framework和DTO

我打算使用EF(POCO)生成的实体向客户端发送数据而不是创建DTO? 这是一个好习惯吗? 基本上,我的EDMX文件在我的DAL层。 因此,UI可以直接访问我的DAL。 谢谢。

entity framework+ AutoMapper(实体到DTO和DTO到实体)

我在使用EF和AutoMapper时遇到了一些问题。 = / 例如 : 我有2个相关实体(客户和订单),他们是DTO课程: class CustomerDTO { public string CustomerID {get;set;} public string CustomerName {get;set;} public IList Orders {get;set;} } class OrderDTO { public string OrderID {get;set;} public string OrderDetails {get;set;} public CustomerDTO Customers {get;set;} } //when mapping Entity to DTO the code works Customers cust = getCustomer(id); Mapper.CreateMap(); Mapper.CreateMap(); CustomerDTO custDTO = […]

C#MongoDB:如何正确映射域对象?

我最近开始阅读Evans的Domain-Driven设计书,并开始了一个小样本项目,以获得DDD的一些经验。 同时我想了解更多有关MongoDB的知识,并开始用MongoDB和最新的官方C#驱动程序替换我的SQL EF4存储库。 现在这个问题是关于MongoDB映射的。 我看到用公共getter和setter映射简单对象非常容易 – 没有痛苦。 但是我在没有公共设置者的情况下映射域实体有困难。 据我所知,构建有效实体的唯一真正干净的方法是将所需的参数传递给构造函数。 请考虑以下示例: public class Transport : IEntity { private readonly TransportID transportID; private readonly PersonCapacity personCapacity; public Transport(TransportID transportID,PersonCapacity personCapacity) { Validate.NotNull(personCapacity, “personCapacity is required”); Validate.NotNull(transportID, “transportID is required”); this.transportID = transportID; this.personCapacity = personCapacity; } public virtual PersonCapacity PersonCapacity { get { return personCapacity; } } […]

使用linq到sql后端通过WCF查询DTO对象

我正在开发一个项目,我们需要针对WCF服务创建复杂的查询。 该服务在后端使用linq to sql并将查询投影到数据传输对象,如下所示: dbContext.GetQueryable() .Where(x => x.Id == formatId) .Select(x => FormatHelper.PopulateMSFormat(x)) .ToList(); 我想要做的是在客户端指定一个查询,假设我想查询具有某个属性或其中几个属性的所有格式。 这个风格的东西: var assets = client.QueryForAssets()。Where(x =>(x.name ==“Test”|| x ==“Arne”)&& x.doe ==“john”); 我知道我无法通过WCF返回IQueryable,但是可以使用OData服务完成类似的事情。 问题是我必须返回DTO和OData让我很容易绑定到L2S-datacontext,它暴露我的数据模型而不是DTO。 那么是否有一种很好的方法可以将针对DTO的查询序列化,从而有效地传播到l2s层? 我想过编写自己的查询语言,但我发现将正确的表达式树构建为l2s的谓词是很困难的,因为没有从DTO到linq类的映射。

仅更新未设置为null的EF实体上的某些属性

我有一个浏览器发送JSON但它只包含已更改的给定模型的属性。 因此,一旦WCF DataContractJsonSerializer完成它的工作,我就有一个对象,可能只填充了ID和Description字段。 将其附加到DbContext将导致描述字段被更新,但所有其他字段被设置为其类型在数据库中的默认值。 这是因为如果WCF没有看到JSON中指定的属性,那么它将跳过它,这意味着实例中的属性将根据自动实现的属性使用类型默认值。 所以这意味着我需要决定在没有访问JSON本身的情况下传递了哪些字段。 事实上,它可能是线上的XML,所以我可以使用的是这个部分序列化的对象。 最合乎逻辑的是使用null作为特殊值,这意味着此属性尚未被序列化。 所以在POCO模型的构造函数中,我将所有属性设置为null 。 在Update方法中,然后使用此序列化对象作为存根。 我必须遍历每个属性,如果值没有设置为null,那么我将其状态设置为modified。 据我所知,这是没有任何副作用的工作,但我只是不确定这是做这样的事情的方式。 它添加的一个限制是客户端不能再故意将属性设置为null,因为该更新将丢失。 解决此问题的一种方法是使用一个特殊的int值,可以设置为在数据库中表示null,也可以是一个空字符串,表示数据库中的null,并在更新中使用代码查找这些特殊值,然后设置实体属性为null。 远非理想,可能容易出错。 这是我目前处理更新的代码。 我真的非常感谢有关更好,也许更明显的做法的建议。 夏季:如何判断模型实例上的哪些属性已由DataContractSerializer / DataContractJsonSerializer设置,哪些属性仅使用其构造函数的默认值。 使用特殊值是有问题的,因为客户端可能希望将某些内容设置为空字符串,或者设置为0或-1或实际上为null。 public T Update(T obj) { var entity = ds.Attach(obj); // For each property in the model foreach (var p in typeof(T).GetProperties()) { // Get the value of the property var v = p.GetValue(obj, […]

在3层架构中使用DTO

我使用简单的3层架构。 在这里我使用DTO类在UI,BL和DL之间进行通信。 那么层之间的沟通有更好的方法吗? 或者这是正确的方法?

这是DTO的正确使用吗?

我正在编写一个控制台应用程序,它可以从存储过程记录集中进行大量数据检索。 对于我正在使用的每个记录集类型,我有一个使用EF和自定义复杂类型的Repository来检索数据: public interface IBalanceSheetRepository { IEnumerable GetBalanceSheetRecords(); } public class BalanceSheetRepository : IBalanceSheetRepository { DBContext _context; … public IEnumerable GetBalanceSheetRecords() { ObjectResult results = _context.GetBalanceSheet(); return results.Select(CreateBalanceSheetDTOFromDAO); } private static BalanceSheetRecordDTO CreateBalanceSheetDTOFromDAO(BalanceSheetRecord dao) { return new BalanceSheetRecordDTO { … }; } } 这里, BalanceSheetRecord是我在设计器中创建的复杂数据类型。 我创建了一个DTO以避免耦合,因为BLL不应该知道BalanceSheetRecord类型。 这是我的问题:由于DTO类型用于存储库接口的方法签名,并且由于我的BLL最终将使用存储库并返回DTO的集合,因此它似乎是一个跨领域的问题。 因此,我让DTO与repo接口一起生活在一个单独的“Infrastructure”组件中。 这是我努力实现的良好做法,还是我在某个地方转错了? 另外:在我的存储库中新建数据上下文是不好的做法? 当两个组件都属于DAL时,是否有一定数量的耦合? 我想使用DI,但是对于替换TestBalanceSheetRepository的repo的DBContext实现似乎更有用。

EF与POCO + WCF + WPF。 在客户端重用POCO课程还是使用DTO?

我们正在开发一个带有WPF客户端的3层应用程序,它通过WCF与BLL进行通信。 我们使用EF访问我们的数据库。 我们一直在使用EF的默认EntityObject代码生成器,但是当通过线路发送这些对象时,以及在BLL中处理和重新附加它们时会遇到很多问题和序列化问题。 我们即将切换到POCO模板,并重写数据访问和我们应用程序的通信部分(我们希望有一个更清洁的架构,而不是那种“魔术代码”。 我的问题是在客户端重用POCO类是否是个好主意? 或者我们应该创建单独的DTO类? 即使它们与POCO实体类相同? 这两种方法的优点/缺点是什么?

Json序列化类型的对象时检测到循环引用

给课程: public class Parent { public int id {get; set;} public int name {get; set;} public virtual ICollection children {get; set;} } [Table(“Child”)] public partial class Child { [Key] public int id {get; set;} public string name { get; set; } [NotMapped] public string nickName { get; set; } } 和控制器代码: List parents = parentRepository.Get(); […]

数据传输对象模式

对不起,我是企业应用程序的新手以及设计模式。 可能是这个问题缺乏对设计模式的了解。 我发现使用DTO传输数据更好。 我的业务实体类如下: public class Patient { public string ID{ get; set; } public string FullName { get; set; } public string FirstName { get; set; } public string Surname { get; set; } } 所以在我的应用程序中,用户只能提供ID和HospitalID。 所以它需要另一个Web服务并获取人员信息 public class PersonDTO { public string NIC { get; set; } public string FullName { get; set; […]