我试图找出如何解决这个问题。 我有一些数据插入到表2可以称他们为表A和B表
Table A has these columns
AId<PK>
A1
A2
A3
Table B has
AId<PK>
A1
B2
B3
B4
现在我的第一个问题是应该另一库调用另一个存储库? 我不认为这将解决我目前的问题,但我只是想知道这一点以备将来参考?
现在到了我的问题。
当我叫我的仓库层(TableARepository)创建,创建表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();
所以我觉得这是好的,我不认为我会需要调用myBTable库(创建tableB的)这或服务层。
现在,这里的问题。 表B表应该只有插入此表中的信息,当且仅当它不等于“嗨”。
so param1 != "hi" // insert
param1 == "hi" // ignore and only insert table A
因此这将意味着我将不得不缠上了我的表B这样的
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();
}
现在,我不知道我是否应该在这里做这个,因为这看起来几乎像业务逻辑。 但在同一时间,我不知道如何做到这一点的业务逻辑,因为无论哪种方式,我仍然在价值传递给插入,即使它是空的创建方法(A1是一个可为空字段)。
所以,我应该叫在TableA.Id,A1的tableB的服务层通和检查A1是什么。 如果好然后去表B库并插入这样的说法?
所以TableARepostiory - >表B的服务层 - > TableBRepository(如果发现该值= “嗨”!)。
所以,我不知道该怎么做。