سؤال

لقد خلق n-tier الحل أين أنا استرجاع البيانات ذات الصلة من خدمة WCF, تحديث في تطبيق نماذج Windows ثم إعادة تحديث البيانات عبر WCF أن يكون استمرت إلى قاعدة البيانات.التطبيق, خدمة WCF قاعدة البيانات كلها على آلات مختلفة.

البيانات التي يتم استردادها يتكون من جسم الطفل الكائنات...

public Product Select(string catalogueNumber) {

  return (from p in this.ProductEntities.Products.Include(@"Tracks")
            where p.vcCatalogueNumber == catalogueNumber
            select p).FirstOrDefault() ?? new Product();
}

التحديثات يجري تطبيقها من قبل العميل التطبيق ، وكذلك تحديث المحتوى الموجود أيضا إدراج إضافية "المسار" الكائنات.

عندما تتلقى المنتج كائن من تطبيق العميل, أستطيع رؤية كافة التحديثات بشكل صحيح ، ولكن من أجل حفظ جميع التغييرات بشكل صحيح يجب أن القفز من خلال بعض الأطواق...

public void Save(Product product) {

    Product original = this.Select(product.vcCatalogueNumber);
    if (original.EntityKey != null) {

        this.ProductEntities.ApplyPropertyChanges(product.EntityKey.EntitySetName, product);

        // There must be a better way to sort out the child objects...
        foreach (Track track in product.Tracks.ToList()) {

            if (track.EntityKey == null) {
                original.Tracks.Add(track);
            }
            else {
                this.ProductEntities.ApplyPropertyChanges(track.EntityKey.EntitySetName, track);
            }

        }

    }
    else {

        this.ProductEntities.AddToProducts(product);

    }

    this.ProductEntities.SaveChanges();

}

بالتأكيد يجب أن يكون هناك طريقة أسهل أن تفعل هذا ؟

ملاحظة:لقد قضيت أفضل جزء من بعد ظهر اليوم التحقيق في EntityBag المشروع ، ولكن وجدت أن هذا لم يتم تحديث للعمل مع EF RTM.ولا سيما حين بنجاح تحديث البيانات الموجودة الاستثناءات التي ألقيت عند خلط في كائنات جديدة.

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

المحلول

ليس لدي الجاهزة الإجابة الخاصة السيناريو ولكن مجرد سؤال:هل تفقدت ADO.NET خدمات البيانات (و.ك.أ."أستوريا") ?

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

يمكن أن يكون هذا الخيار ؟

التحقق منها على MSDN, في ديفيد هايدن بلوق, ، Channel9, أو رؤية بعض من ممتازة دورات في MIX08 وتخلط 09

مارك

نصائح أخرى

وربما يجب عليك إلقاء نظرة على عينة EntityBag داني سيمونز ".

وهي مصممة لتبسيط هذا النوع من القضايا: http://code.msdn.microsoft.com/entitybag/

وكما يقول كاتز الأمور ستكون أسهل كثيرا في NET 4.0.

واحدة من الأشياء التي تخطط على القيام للمساعدة على خلق قالب T4 لك أن يولد الطبقات بالنسبة لك أن تكون قادرة على تتبع الذاتي، وبعض سطح إضافيا لجعل من السهل على هذه الكيانات تتبع النفس إلى ApplyChanges () لسياق عندما نعود إلى الدرجة الخادم.

ويساعد هذا الأمل

وهتاف اليكس (PM على الفريق إطار الكيان في مايكروسوفت).

أرى أن هذا الموضوع هو هادئ تلت ذلك ، لذا أسمح لنفسي أن تفعل القليل من التحديث...

Weeeeee !النفس تتبع الكيانات وصل في EF 4!

التحقق من ذلك:

http://blogs.msdn.com/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx
شرح الذاتي آلية تتبع من قبل الكيان إطار فريق.

http://aleembawany.com/2009/05/17/new-features-in-entity-framework-40-v2/
Anouncement من الميزات الجديدة في EF 4.

http://msdn.microsoft.com/en-us/magazine/ee321569.aspx
مقارنة بين عدة N-Tier أنماط قطع الكيانات.

استمتع !

في الكيان Framewrok 4 يمكنك استخدام الأسلوب "ApplyCurrentValues" لتحديث كيان منفصل.

في السيناريو الخاص بك وسوف يكون شيئا مثل هذا:

this.ProductEntities.Product.ApplyCurrentValues(product);
foreach (Track track in product.Tracks.ToList()) {
if (track.EntityKey != null)
{
//Update Entity
  this.ProductEntities.Track.ApplyCurrentValues(track);
}
else
{   
  //New Entity
  this.ProductEntities.Track.Attach(track);
}

و}

وآمل أن يكون مفيدا

واحد من أوجه القصور في إطار الكيان V1.0 تم تحديث الكيانات. للأسف أعتقد أنك من الحظ حتى وصول الإصدار 2.

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