我喜欢尽可能保持项目结构的清洁。 样品:
--BlogApp.sln
--BlogApp.Data
BlogModel.edmx (the EF mappings)
Post.cs (I end up having partial classes in here with attributes)
--BlogApp.Domain
--Entities
Post.cs (I would like to have my POCOs here with all its additional logic)
--Repositories
PostsRepository.cs
--BlogApp.Ui
(standard MVC structure)
当我使用EF作为我的ORM时,我最终弄得一团糟。任何人都可以建议一些“干净”的方式来构建项目吗?或许您可以建议一些最常用的标准项目结构。
答案 0 :(得分:19)
我的首选结构是:
Solution -- Common - Shared features used accross all layers - You can also place interfaces for repositories and uow here -- Entities - shared among DataAccess, Business (and UI in small projects) - T4 template + partial classes + custom enums - partial classes can contain methods with domain logic => domain objects -- DataAccess - all EF dependent code here - EDMX or code first mapping - Repositories - UnitOfWork -- Business - not every project needs this assembly - Business services - Logic like workflows - DTOs exposed to UI -- UI - Controllers - Views - ViewModels
答案 1 :(得分:2)
查看T4 Templates and the Entity Framework上的这篇文章。您可以为通过EF生成的实体属性编写自定义属性。我已经多次这样做了,在弄清楚如何做之后,它现在节省了很多时间。我之前尝试过使用部分类,但我的EF生成的类最终会使用自定义属性覆盖另一个类。也许我做错了什么,但无论如何,我现在更喜欢T4模板解决方案,因为它对我来说似乎更干净 - 最小化项目中的类数量。
此外,当您从DB更新EF模型并重新生成类时,您的自定义属性仍然存在。 FTW!
<强> ADDED 强>: 顺便说一下,我们通常在数据层中定义我们的模型对象,让它们由EF的实体映射/填充。或者(甚至更简单)使用EF生成的实体一直到UI层,而无需自定义POCO。