EF 代码优先映射的“状态对象” - 完全隐藏?

Posted

技术标签:

【中文标题】EF 代码优先映射的“状态对象” - 完全隐藏?【英文标题】:"State objects" for EF code first mapping - hiding completely? 【发布时间】:2015-03-10 18:38:16 【问题描述】:

由于多次尝试使用 EF Code First 映射我的一个聚合而没有将其转换为完整的贫血域模型,我经历了一周的纯粹挫折之后,我最近偶然发现了来自 Vaughn Vernon 的 this blog entry,描述了一个漂亮的解决方案这不涉及荒谬的映射尝试、“DAO”等,而是干净的域实体和状态对象让 EF 完美地完成它的工作。

现在,该解决方案有一个小缺陷,我想知道是否有任何方法可以摆脱它:为了从客户端“隐藏” state 对象(以及让它们只能被 EF 访问),Vaughn 将“状态”访问器以及“状态构造器”表示为内部的。当所有内容都被推到一个只能从外部访问的单个库项目中时,这很好用,但是在大多数情况下,域分布在多个模块等中,这意味着我必须将成员公开 - 从而暴露域中的技术问题实体到客户(他们可以使用..或滥用)。

是否有可能隐藏 状态对象 不让客户端访问?

【问题讨论】:

【参考方案1】:

你也可以……

a) 将[assembly:InternalsVisibleTo("FriendAssemblyName")] assembly attribute 添加到您的AssemblyInfo.cs,只要您知道所有朋友程序集,或者

b) 使用explicit interface implementation 向不将您的对象投射到专用界面的用户隐藏该属性,例如IState<T>,或

c) 添加 [EditorBrowsable(EditorBrowsableState.Never)] attribute 以对 IntelliSense 隐藏属性。

【讨论】:

以上是关于EF 代码优先映射的“状态对象” - 完全隐藏?的主要内容,如果未能解决你的问题,请参考以下文章

EF的三种模式

EF 代码优先模式生成问题

EF工作流程

如何禁用代码优先迁移

EF 增删改

EF 4.1 复杂关系的实体映射