我已经暗示了这个问题 我的另一个问题, ,但我认为值得将其分解为自己的问题,因为它并不是真正取决于我提到的其他情况。

无论如何 - 在Q上,不知道这是否可能。寻找解决方案/解决方法。

我有一个班级图书馆,只有Poco的库:

MyCompany.MyProject.Domain.POCO

这个大会有这样的poco:

public class Post
{
   public int PostId { get; set; }
   public int Name { get; set; }
      ...
}

现在,我有另一个类库,它是我的dal/存储库,并使用实体框架4.0进行持久:

MyCompany.MyProject.Repositories

该组件对POCO项目有一个参考,因为它需要在POCO上执行CRUD操作(Grab DB对象,Project to Poco,返回,以及修改POCO)。

现在,我也有一个 Web应用程序, ,它具有对POCO和存储库组件的参考。

如果我这样做:

somePOCO.PostId = 10;

我得到了一个sqlexception, 邮政 是数据库中的身份字段,因此不应是显式集。

有什么方法我可以 隐藏 这些特殊属性的设置器,因此只有存储库才能访问设置器?

我想不出一种方法来使用定期可访问性修饰符(因为它们都不适合这种情况),你们能想到解决方法吗?

有帮助吗?

解决方案

您可以使二传手内部进行内部,并使内部设备可见到存储库组件

[assembly: InternalsVisibleTo("MyLibrary.Repositories")]
public class Post
{
   public int PostId { get; internal set; }
   public int Name { get; internal set; }
      ...
}

这意味着所有内容都可以“获得”这些属性,但是只有此汇编以及包含存储库的组件才能“设置”

其他提示

将所有播放器标记为内部,然后将内部Visibleto属性添加到您的Pocos组件中:

 [assembly: InternalsVisibleTo( "MyCompany.MyProject.Repositories" )]  

卢克·谢弗(Luke Schafer) 是一个很好的答案。它满足了问题的技术要求。但是我建议谨慎,仅仅是因为这可能无法解决将来的问题。

不要建议过度工程,但也许您可能想考虑进一步抽象使用具有可设置ID属性的对象。使用此属性装饰来创建这种“可见性”可能足够了,但我认为这是解决问题的攻击性。将这些对象之间的相互作用封装在其他物体之间,从而从消耗代码中删除setter访问权限可能会更清洁。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top