私はこの問題に取り組む方法を理解しようとしています。私は2つのテーブルにいくつかのデータを挿入する必要が今の私の最初の質問は、別のリポジトリが別のリポジトリを呼び出す必要がありましたリポジトリは別のリポジトリを呼び出す必要がありますか?あるいは、リポジトリがサービス層を呼び出す必要がありますか?
Table A has these columns
AId<PK>
A1
A2
A3
Table B has
AId<PK>
A1
B2
B3
B4
表Aと表Bそれらを呼び出すことができますか?私はこれが私の現在の問題を解決するとは思わないが、私は将来の参照のためにこれを知りたいのですか?
今、私の問題に。
私が私のリポジトリ層(TableARepitory)を作成してテーブルを作成するときに、私はすぐに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();
だから私は、これは大丈夫だと思うし、私はこのまたはサービス層のための(TABLEBを作成する)myBTableリポジトリを呼び出す必要があるだろうとは思いません。
ここに問題があります。 TableBテーブルは、「hi」と等しくない場合に限り、このテーブルに情報を挿入する必要があります。
so param1 != "hi" // insert
param1 == "hi" // ignore and only insert table A
ので、これは私は、これはほとんどのビジネス・ロジックのように思えるので、今、私はここにこれを実行すべきかわからないこの
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();
}
ように私TableBのをラップする必要がありますを意味します。しかし、同時に私はこのビジネスロジックをどうやって行うかわからないので、どちらかの方法で、たとえnullであってもcreateメソッドに挿入する必要があります(A1はnull許容フィールドです)。
TableA.Id、A1にtableBサービス層を渡し、A1が何であるかを確認する必要があります。良い場合は、TableBリポジトリに移動してその方法で挿入しますか?
だからTableArepostory - > TableBサービス層 - > TableBRepository(その値!= "hi"が見つかった場合)。
私は何をすべきか分かりません。
私はいつも私が見たすべての例が非常に小さいので、テーブルあたりのリポジトリを作ったように思っていました。私は今、私は未来を知っていると思う。私はそれを修正するためにすべてを減らすつもりはないので、私はそれの中に少しの論理を持っていなければならないと思う。とにかく今はありません。 – chobo2