我想将EntityFrameWork
课程与仅IDal<T>
的{{1}}界面打包在一起。
我想创建与每个实体对应的BL数据模型
如果我有CRUD operations
,我会创建TempEntity
和界面TempBlObj
是否有任何指导来完成此类任务?
我在实施IDal<TempBlObj>
因为实体中的保存是通过以下方式完成的:
Save(TempBlObj)
并且继续对实体引用进行了更改。
任何解决方案?
更新
我正在做这一切以模拟我的mDbEntities.SaveChanges();
界面
例如,为了更改TempEntity.status
我必须创建一个具体方法IDal<T>
而不是通用ChangeStatus()
:CRUD
因为保存实体就像
一样 Save(BlObj item)
和
..take reference to some entity, do some change..
我尝试添加BlObjects以放松Bl和具体EntityFW之间的依赖关系
更多一般:
使用ORM时,使用mMamDbEntities.SaveChanges();
intreface(IDal<T>
操作)处理松散炮弹的最佳做法是什么?
答案 0 :(得分:0)
保存实体的责任不应该是实体本身的工作。这是个坏主意。 您可以考虑在您的情况下实施repository pattern。
答案 1 :(得分:0)
在为我的系统规划存储库时,我会记住几个事实:
O / RM可以帮助我实现存储不知情的实体。这意味着我不专门划分业务实体和数据库实体。我有一个User
实体 - 无论如何,ORM都应该坚持下去,而且我不会在这里引入额外的图层。
我从限制较少的界面开始:
interface IDal {
T Get<T>(id);
void Save(object o); //or T, if needed
IQueryable<T> Query<T>();
}
var users = new List<User>(){ /* Users here */}
var mockedRepository = new Mock<IRepository>();
//getup GET
mockedRepository.Setup(
self => self.Get<User>( It.IsAny<int>() )
.Returns( (int id) => _users.First(u => u.Id == id) );