相关疑难解决方法(0)

库应该调用另一个存储库吗?或者存储库是否应该调用服务层?

我想弄清楚如何解决这个问题.我必须将一些数据插入到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)

asp.net asp.net-mvc repository-pattern linq-to-sql

8
推荐指数
1
解决办法
4541
查看次数

UnitOfWork等于Transaction吗?还是不止于此?

互联网上充满了关于UnitOfWork模式的信息; 即便如此也不例外.

我仍然不明白它.在我的理解中UnitOfWork = Transaction in DB.就这样; 仅此而已.

它是否正确?

我的困惑是由于它是如何在不同的ORMs中实现的.NHibernate使用ISession的不仅仅是更Transaction.Dapper把一切都留给你.

我的问题是关于设计模式,不考虑任何ORM或技术.

如果不仅仅是Transaction,请解释如何.

编辑1

参考链接为在@大卫奥斯本答案建议.

工作单元会跟踪您在业务事务中可能影响数据库的所有操作.完成后,它会计算出因工作而需要更改数据库的所有操作.

因此,这意味着UnitOfWorkDBTransaction 和更多.

以下是其他责任: -

  • 保持您在本次工作中更改,插入和删除的状态.

  • 根据此状态,在工作完成后修改数据库.

虽然上面引用中没有明确提及,但它也可以控制查询的批处理.

我的理解现在正确吗?

design-patterns data-access-layer unit-of-work

6
推荐指数
2
解决办法
2664
查看次数

从DAL返回的对象的DTO等价术语是什么?

我已经在使用DTO通过网络进行数据传输。现在,我还将不同的DTO类引入DAL。这是为了避免跨层传递应用程序(业务)对象。

为避免命名混乱,我想使用DTO以外的其他术语,但找不到一个好的术语。

从DAL返回的对象的DTO等价术语是什么?

data-access-layer dto

1
推荐指数
1
解决办法
846
查看次数