我是EF4的新手,之前没有任何经验。因此,如果这是一个非常简单的问题,请多多包涵。
我在BOL中有POCO实体(.tt文件),在DAL中有.edmx文件(EDM),在表示层中有webapp。所有业务逻辑都进入BLL层。
这里是引用:
用户界面-> BLL-DAL-BOL
BLL -> DAL-BOL
DAL -> BOL
BOL ->没有我的项目。
1-我对图层区分的理解正确吗?我的方向正确吗?
2-如何将ASP.NET成员资格提供程序与实体一起使用。我是否也应该实现成员身份,对持久性无知,并将sql server中的所有用户表映射到实体?
2-如何添加自定义验证?我的意思不是maxlength或有效的电子邮件...,我的意思是类似访问级别。例如,我希望某些用户能够修改我的网站中的字段(例如productprice)。我应该在哪里使用User.IsInRole方法? BLL没有对用户信息的引用。我应该将一些参数传递给BLL(例如“bool CanChangePrice”)以澄清访问级别吗?
最佳答案
哇,卡米亚尔,这个问题只涉及几个问题;-)我不确定我是否会讲完所有可能的内容,但是可以。
项目结构
-通常,您的项目结构是正确的,并且您的引用是正确的。有人可能会争辩说您想稍微分开您的关注点并破坏一些引用,但是就我个人而言,我认为您的结构可行。
成员(member)提供者
在MembershipProvider和EF之间肯定存在 split 。但是,您可以下载SQLMembershipProvider的源代码,并将其转换为使用EF。我实际上做了此转换。该文件长约1500行,但没有大量的ADO代码。
您没有问,但我想我要解决的是,您是否要使用成员(member)资格提供程序。如果您正在执行基本的成员资格管理和角色,则成员资格,角色和配置文件提供程序可以为您节省大量时间。要深入了解这些功能,请查看4GuysFromRolla(http://www.4guysfromrolla.com/articles/120705-1.aspx)上的系列文章。
如果您的需求更加复杂,恕我直言,成员资格提供者很快就会崩溃。例如,当用户为您的站点注册时,您必须立即在少数几个不同的表中创建行。好了,成员资格提供者是通过webconfig注册的,并使用成员资格提供者界面。它仅接受create函数中的某些字段。那男孩要做什么?好了,您可以在 Controller 中打开一个较大规模的事务,运行成员资格提供者添加用户功能,运行您自己的
MyCustomUserStuff()
,然后提交事务。我觉得这种方法没有吸引力的两个原因是,我现在在事务堆栈中渗入了事务代码,如果我需要做的就是添加一些额外的字段,那么我现在就不必要地将数据库调用增加了一倍。我想我只是发现成员资格提供者受到了很大的限制,一旦进入那里并成为我自己的自定义成员资格提供者,使用MS模型的好处就很快消失了。
验证
我认为这里的答案是响亮的-这取决于。您的权限是静态的吗?也就是说,“SiteManagers”组中的人可以在整个网站上进行编辑吗?还是您的权限更加精细?意味着SiteManagers可以访问分布在这22个表中的这75个字段,还是更多基于表的字段?此外,权限有多可变?您的站点管理员是否需要能够经常打开/关闭或关闭对不同表中各个字段的访问?
我想我需要更多地了解您对特定答案的要求。请记住,授予权限的粒度越细,客户端将对理解和管理所有权限的配置头痛就越多。
另外,您正在使用什么后端?许多DBA都会面对这些决定。在该世界中,一种经常使用的策略是创建一系列 View ,其中每个 View 公开用户所拥有的列。例如,
EmployeesHR
View 将仅公开HR人员有权访问的那些列,EmployeeDirectory
将仅公开目录可访问的那些字段,然后为HR用户授予HR View 的权限,但不授予其基础表的权限。只是一个想法。无论如何,希望这会有所帮助。
关于asp.net - 多层Web应用程序中的 Entity Framework POCO实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307577/