王小力
如果关联查询一个Name,如果直接在Model里面添加一个相关联的Name字段,通过一个关联查询即可,如果写在ViewModel,可能需要一次单独的查询来获取这个Name,这个如何衡量。。thanks例如一个文章之关联了作者Id,但是显示的时候需要显示作者名 糖葫芦
看情况咯,如果需要就用incluede来关联加载
王小力
意思是写到Model中,做一次联合查询?这样时间长了,Model就有点面目全非了..
王小力
所以想问问各位大神有什么"标准规范"的实现.. 王小力
台湾哥..我记得之前问过你这个问题数据库实体对象.. 我来自台湾
就 別把entity當viewmodel用
王小力
在不用任何开发框架(DDD),的情况下如何解决这样的问题,有什么原则。。。
我来自台湾
你view需要甚麼viewmodel就怎麼設計
controller負責把entity轉為viewmodel
王小力
也就是说之前假设的场景 Name要写到ViewModel中咯...
王小力
然后再通过一次查询去查询对应的Name信息..
我来自台湾
恩
基本上viewmodel能夠不設計為多層次就不要
我来自台湾
如果只是顯示 多層次還好處理
但如果是有編輯 多層次在MVC中問題很多
王小力
多一次查询,会不会有点浪费资源啊 王小力
假设之前的场景,我要查询展示一篇新闻,同时也要现实作者,但是呢,新闻的Entity里面之关联了UserId,所以还需要一个UserName。。
我来自豪宅
如果你的文章作者名字改变不需要更新那么可以缓存字段
我来自台湾
dbContext.Employees.Select(e => new DisplayViewModel
{
Name = e.Name,
CustomerName = e.Customer.Name
}
我来自台湾
沒呀
延遲加載只發生在Entity已經查詢到內存
EF加載有多種模式
王小力
哦,这是VM中。。。那好吧,我的“UserName”也写到VM中把。。
我来自台湾
你只要有個原則
切記
ViewModel是為View創建
多寫個ViewModel很多問題都沒了
王小力
恩。。有大量重复的字段。我还想过能不能直接在VM中写个Model的类 我来自台湾
多層次的ViewModel可以透過partialview等機制做處理
王小力
台湾哥,还有个问题,在Repository中的UOW。。我看网上的很多例子都是顺序提交,,先删除在添加等等,这完全不实用。。
我来自台湾
映射Entity到ViewModel你可以透過automapper這類東西簡化代碼
順序提交
王小力
就类似这样的代码。。 我来自台湾
TranscationScope不是UOW吧
跟UOW差別很大
我来自台湾
喔 我明白了
你看下他的TranscationScop
是不是.net的TranscationScope
如果是
這段代碼本身就有問題了
commit的確要事務提交
但不應該是TranscationScope
王小力
看了一下ABP的UOW太复杂了..我简单实现了个在IRepository里面定义的方法.. 我来自台湾
... 你問題到底是啥?
我先問個問題
你知道
王小力
我这样写可否 王小力
保存一个公用的db上下文,用于联合操作。。 我来自台湾
很多人寫repository跟uow但卻不知道這些東西的目的
王小力
Repository抽象数据库的共同操作吧。。。 我来自台湾
你先去看 企业应用架构模式 這本書中 對於uow與repository的定義
王小力
没实际做过DDD的项目,就是IBatisNet写了个Repository..。。
我来自台湾
你就會明白 你的問題的答案
uow repository是這本書作者提出的模式
王小力
恩,,@我来自台湾 thanks