cho*_*bo2 8 asp.net asp.net-mvc repository-pattern linq-to-sql
我想弄清楚如何解决这个问题.我必须将一些数据插入到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
param1 == "hi" // ignore and only insert table A
Run Code Online (Sandbox Code Playgroud)
所以这意味着我必须像这样包装我的TableB
if(param1 != "hi")
{
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)
现在我不确定我是否应该这样做,因为这看起来几乎像业务逻辑.但同时我不知道如何做这个业务逻辑,因为无论哪种方式我仍然必须传入值插入到create方法,即使它是null(A1是一个可空字段).
所以我应该在TableA.Id,A1中调用tableB服务层传递并检查A1是什么.如果好,那么转到TableB存储库并以这种方式插入它?
所以TableARepostiory - > TableB服务层 - > TableBRepository(如果发现那个值!="hi").
所以我不知道该怎么做.
Jos*_*osh 10
不 - 我想不出存储库调用另一个存储库或其他服务的原因.他们唯一需要关心的是持久化您的实体并从数据存储中检索实体.除了底层域之外,它们应该对应用程序的大多数方面一无所知.
听起来你假设他们应该是每个表的存储库,这是不正确的.每个聚合根应该有一个存储库,该存储库应该负责将数据存储到所有底层的相关表中.存储库可以有一些与存储数据的位置或方式有关的逻辑,但最好在可能的情况下将其封装在公共区域中.
例如,如果你有人物对象并需要根据性别保存到不同的表,你可以使用继承(如果(人是女人)保存在这里......)或对象上的属性(如果(person.Gender) == Gender.Female)保存在这里......)或规格(if(FemaleSpecification.IsSatisfiedBy(person))保存在这里......).
| 归档时间: |
|
| 查看次数: |
4541 次 |
| 最近记录: |