ما هي أفضل طريقة لحفظ واحد لكثير العلاقة في Linq2Sql?

StackOverflow https://stackoverflow.com/questions/432510

  •  10-07-2019
  •  | 
  •  

سؤال

أنا في محاولة لمعرفة أفضل طريقة لحفظ واحد بسيط لكثير العلاقة في Linq2Sql.

لنفترض لدينا ما يلي بوكو نموذج (pseduo رمز راجع للشغل):

شخص لديه صفر إلى العديد من Vechicles.

class Person
{
    IList<Vehicle> Vehicle;
}

class Vehicle
{
    string Name;
    string Colour;
}

الآن عندما لإنقاذ شخص ما ، أمرر أن بوكو كائن إلى مستودع رمز (والذي يحدث أن تكون 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();
}

أنا لست متأكدا من أين و كيف ينبغي التعامل مع قائمة المركبات الشخص قد يكون ؟ أي اقتراحات ؟

هل كانت مفيدة؟

المحلول

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();
}

الآن يمكنك اختيار لإنشاء قائمة من المركبات على مستوى آخر ، مع البيانات القادمة من واجهة.

ولكن عليك أن تتذكر أنه لا يكفي لإضافة مركبة قائمة على الشخص كائن تحتاج أيضا إلى تعيين المركبات شخص العقار إلى الشخص الذي لديه سيارة.

الملاحظة أنا لست متأكد من هذا ولكن عندما تفعل db.الناس.SingleOrDefault قد يكون التحميل الشعب كله الجدول في الذاكرة .هذا ليس شيئا كنت تريد أن تفعل. تصحيح Slace في التعليقات.

نصائح أخرى

وكل ما عليك القيام به هو التأكد من أن هناك علاقات المناسبة اقامة داخل قاعدة البيانات.

إذا الجدول سيارتك لديه PersonId وهناك مفتاح خارجي بينهما عند إضافتها إلى DBML LINQ إلى SQL سيتم الكشف عن وجود علاقة بينها وبين إنشاء تمثيل Table<T> العلاقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top