2010-01-08 115 views
2

阅读Enitity框架后,我有一些问题:实体框架(实体类)序列化

1]什么是层之间传输实体的最佳方法是什么? a]我必须为此创建更轻的DTO吗?或者我可以有效地序列化Entitiy并将其转移?

B]如果我必须创造光的DTO,为Efficency,之后我看到Automapper的很好的使用, 我不很明白它是如何节省额外的编码(如果它的目标), 我意思是说,我们需要编写扁平类(DTO)属性,所以它只能保存ctor。

2]有没有意见建筑实体类返回来自DTOs?

谢谢。

回答

2

对1的回答: 在层之间转移实体的最佳方式取决于您的应用程序。您可以创建DTO的是,虽然序列化实体我的首选解决方案是possible,但你需要确保这其实是你想要做的,记住:

“当你使用二进制序列化和WCF数据契约序列化,如果对象序列化在对象图中有相关的对象,这些对象也是序列化的,XML序列化不会序列化相关对象。“

Automapper的工作原理是映射属性自动,而不是写所有的管道语句如:

dto.id = entity.id; 
... 
all other dto assignment operations 

你很快就会看到的管道代码量积累,这样会节省相当多的这=是特别是如果你有视图类和dto对象的代码行,我发现这符合我想要的完美。就我所知,automapper只有在实体和DTO之间的名称相同时才能工作,并且它可以在这些属性的类型之间进行映射。尽管dto和实体以不同类型存储数据,但您可以添加用于在类型之间转换的映射规则。

回答2: 如果将对象转换为DTO并在更高层次上修改它们,您打算如何通过实体框架将它们保存回去?通常你只需将它们转换回相关实体/创建一个新实体并提交这些更改。

+0

保存编码dto.id = entity.id?,不完全哇, 无论如何,我仍然留下unanswerd问题,正在将实体转移到dtos是最好的方式?或者序列化实体也是可能的选择? – Robocide 2010-01-08 22:26:52

+0

你想要它做什么?我无法真正说出哪个是最好的,而是取决于您的应用和喜好。我已经用我的答案更新了几个答案,应该回答你所有的问题。 – bobwah 2010-01-09 08:16:59

+0

关于automapper,我希望它能够映射而不会强迫我打开代码并编写新的DTO /修改存在的DTO新属性。 [可以来自XML配置]。因为如果我已经打开代码并编写DTO类及其属性,编码dto.id = entitiy.id,不是这样节省时间,它是一个很好的,但很少一。 2]你是否也使用automapper,dto - > entity?我见过在stackoverflow它有一些问题? – Robocide 2010-01-09 13:08:52