يمكن LINQ to SQL IsDiscriminator العمود لا وراثة ؟
-
09-06-2019 - |
سؤال
أنا أصمم قاعدة البيانات الخاصة بي و 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 الدرجة وجود كل هذه الخصائص أنه بدلا من ذلك فقط فضح جذور الملكية حيث يقيمون فيها فعلا.