4

Linq2Sqlで単純な1対多の関係を保存するための最良の方法を見つけようとしています。

次のPOCOモデル(pseduoコードbtw)があると仮定しましょう:

人は0から多くのVechiclesを持っています。

class Person
{
    IList<Vehicle> Vehicle;
}

class Vehicle
{
    string Name;
    string Colour;
}

ここで、Personを保存するときに、そのpocoオブジェクトをリポジトリコード(たまたまL2S)に渡します。人物オブジェクトをうまく保存できます。私は通常これを行います。

using (Db db = new Db())
{
    var newPerson = db.People.SingleOrDefault(p => p.Id == person.Id) ?? new SqlContext.Person();
    // Left to right stuff.
    newPerson.Name = person.Name;
    newPerson.Age = person.Age;

    if (newPerson.Id <= 0)
        db.People.InsertOnSubmit(newPerson);
    db.SubmitChanges();
}

その人が持っている可能性のある車両のリストをどこでどのように扱うべきかわかりませんか?助言がありますか?

4

2 に答える 2

4
using (Db db = new Db())
{
    var newPerson = db.People.SingleOrDefault(p => p.Id == person.Id) ?? new SqlContext.Person();
    // Left to right stuff.
    newPerson.Name = person.Name;
    newPerson.Age = person.Age;

    // add vehicles.
    Vehicle firstV = new Vehicle();
    firstV.Name = "some name";
    firstV.Person = newPerson; // need to do this to set the person Id on the vehicle.
    newPerson.Vehicle.Add(firstV);
    // now when you save the Person it should save the Vehicle list 
    // if you set Cascade save update on the list. (not sure how to do that in L2S

    if (newPerson.Id <= 0)
        db.People.InsertOnSubmit(newPerson);
    db.SubmitChanges();
}

ここで、インターフェイスからのデータを使用して、別のレベルで車両のリストを作成することを選択できます。

ただし、Vehicle を Person オブジェクトのリストに追加するだけでは十分ではないことを覚えておく必要があります。Vehicle の Person プロパティを、Vehicle を持っている人に設定する必要もあります。

観察これについてはよくわかりませんが、 db.People.SingleOrDefaultを実行すると、 People テーブル全体がメモリに読み込まれている可能性があります。それはあなたがしたいことではありません。コメントでSlaceによって修正されました。

于 2009-01-11T07:46:22.297 に答える
1

データベース内に適切な関係が設定されていることを確認するだけです。

Vehicle テーブルに PersonId があり、それらを DBML に追加するときにそれらの間に外部キーがある場合、Linq to SQL はそれらの間に関係があることを検出し、関係のTable<T>表現を作成します。

于 2009-01-11T07:48:30.610 に答える