我的解决方案有这些项目:
DAL,BL和WEB都参考了很棒的DTO.
该过程通常以这种方式执行:
我的DTO能够根据自己的状态(属性值)验证自己.但是现在我遇到了问题,但事实并非如此.我需要他们使用BL(以及因此DAL)进行验证.
我的现实生活中的例子:用户注册和WEB获得验证的用户DTO.有问题的部分是username验证.应根据数据存储检查其唯一性.
我该怎么做?
还有其他信息表明所有DTO都实现了IoC和TDD 的接口(即UserDTO实现IUser).两者都是DTO项目的一部分.
Compilation errorPartial classes can't span assemblies.ActionFilter,可以根据外部条件验证对象.这个将在WEB项目中创建,因此可以看到将在此处使用的DTO和BL.在我的另一个问题中,我已经提到了这个问题,但我认为值得将其分解为自己的问题,因为它并不真正依赖于我提到的其他场景.
无论如何 - 在Q上,不知道这是否可能.寻找解决方案/解决方法.
我有一个类库,只有POCO:
MyCompany.MyProject.Domain.POCO
Run Code Online (Sandbox Code Playgroud)
这个程序集有一个这样的POCO:
public class Post
{
public int PostId { get; set; }
public int Name { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我有另一个类库,它是我的DAL/Repository,并使用Entity Framework 4.0进行持久化:
MyCompany.MyProject.Repositories
Run Code Online (Sandbox Code Playgroud)
这个程序集引用了POCO项目,因为它需要在POCO上执行CRUD操作(抓取DB对象,项目进入POCO,返回,以及修改POCO).
现在,我还有一个Web应用程序,它同时引用了POCO和Repository程序集.
如果我这样做:
somePOCO.PostId = 10;
Run Code Online (Sandbox Code Playgroud)
我得到一个SQLException,因为PostId是数据库中的IDENTITY字段,因此不应该明确设置.
有没有办法可以隐藏这些特殊属性的setter,以便只有存储库可以访问setter?
我想不出用常规辅助功能修饰符来做到这一点的方法(因为它们都不适合这种情况),你们能想到一个解决方法吗?