我想弄清楚如何解决这个问题.我必须将一些数据插入到2个表中,然后将它们称为表A和表B.
Table A has these columns
AId<PK>
A1
A2
A3
Table B has
AId<PK>
A1
B2
B3
B4
Run Code Online (Sandbox Code Playgroud)
现在我的第一个问题是另一个存储库应该调用另一个 我不认为这会解决我目前的问题,但我只是想知道这一点以供将来参考?
现在我的问题.
当我在我的存储库层(TableARepository)中调用create来创建表A.我也立即创建了tableB的字段.
// linq to sql.
TableA myATable = new TableA();
dbContext.myATable.A1 = "hi"; // all these values would come from parameters.
dbContext.myATable.A2 = "bye";
dbContext.myATable.A3 = "go";
dbContext.myATable.insertOnSubmit(TableA);
dbContext.SubmitChanges();
TableB myBTable = new TableB();
dbContext.myBTable.AId = myATable.AId;
dbContext.myBTable.A1 = myATable.A1;
dbContext.myBTable.B2 = "2";
dbContext.myBTable.B3 = "3";
dbContext.myBTable.B4 = "4";
dbContext.myATable.insertOnSubmit(TableB);
dbContext.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
所以我认为这很好,我认为我不需要为此服务层调用myBTable存储库(创建tableB).
现在这是问题所在.当且仅当它不等于"hi"时,TableB表才应该将信息插入到该表中.
so param1 != "hi" // insert …Run Code Online (Sandbox Code Playgroud) 互联网上充满了关于UnitOfWork模式的信息; 即便如此也不例外.
我仍然不明白它.在我的理解中UnitOfWork = Transaction in DB.就这样; 仅此而已.
它是否正确?
我的困惑是由于它是如何在不同的ORMs中实现的.NHibernate使用ISession的不仅仅是更Transaction.Dapper把一切都留给你.
我的问题是关于设计模式,不考虑任何ORM或技术.
如果不仅仅是Transaction,请解释如何.
编辑1
参考此链接为在@大卫奥斯本答案建议.
工作单元会跟踪您在业务事务中可能影响数据库的所有操作.完成后,它会计算出因工作而需要更改数据库的所有操作.
因此,这意味着UnitOfWork是DBTransaction 和更多.
以下是其他责任: -
保持您在本次工作中更改,插入和删除的状态.
根据此状态,在工作完成后修改数据库.
虽然上面引用中没有明确提及,但它也可以控制查询的批处理.
我的理解现在正确吗?
我已经在使用DTO通过网络进行数据传输。现在,我还将不同的DTO类引入DAL。这是为了避免跨层传递应用程序(业务)对象。
为避免命名混乱,我想使用DTO以外的其他术语,但找不到一个好的术语。
从DAL返回的对象的DTO等价术语是什么?