سؤال

أنا أصمم قاعدة البيانات الخاصة بي و LINQ To SQL ASP.NET تطبيق ويب.

تخيل لدي نوعين من الصفحات:طبيعي الجذر.بعض الصفحات الجذور.بعض الصفحات لا.

لدي صفحة جدول قاعدة البيانات و RootPage جدول قاعدة البيانات:

      Page
      ----
   PK PageId
      HtmlTitle
      PageHeading
      MetaDescription
      IsRoot

      RootPage
      --------
FK PK PageId
      FavIcon
      StyleSheet
      MasterPage

أعتقد أنه إذا كان داخل DBML ملف تعيين IsDiscriminator ممتلكات IsRoot العمود ، ثم RootPage الدرجة سيرث صفحة الفئة.

كنت تريد أن تكون قادرة على مثل هذا العمل في قانون بلدي:

MyDataContext db = new MyDataContext();

var roots = from p in db.Pages
            where p is RootPage
            select (RootPage)p;

أو مثل هذا:

RootPage r = new RootPage();
r.HtmlTitle = "Foo";
r.FavIcon = "bar.ico";
...
db.Pages.Add(r);
db.SubmitChanges();

يمكن LINQ to SQL IsDiscriminator عمود nullable أو كاذبة ؟ هل هذا العمل ؟

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

المحلول

المشكلة هنا هي أن تحاول تقسيم الفصل بين اثنين من الجداول ، RootPage الصفحة.

للأسف LINQ to SQL يدعم فقط جدول واحد الإرث حتى هذا لن يجدي.

سوف تحتاج إلى دمج تعريفات الجدول معا وجعل RootPage-مجالات محددة nullable.على سبيل المثال

   Page
   ----
PK PageId
   HtmlTitle
   PageHeading
   MetaDescription
   IsRoot
   FavIcon (Nullable)
   StyleSheet (Nullable)
   MasterPage (Nullable)

يمكنك ثم تعيين IsRoot أن يكون مميز و بمناسبة صفحة الفصل الافتراضي نوع RootPage باعتبارها الفئة الممي قيمة 'صحيح'.

بديل إذا كنت لا تمانع في الأمور قراءتها إلا أن وجهة النظر التي انضمت إلى جدولين معا قاعدة الطبقات من ذلك.

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

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