كيف يمكنك التعامل مع "العلاقات" الخلقية بالهجرة؟
-
16-09-2019 - |
سؤال
وفقا لهذا المقال:http://subsonicproject.com/docs/3.0_migrations.
Bottom line: if you're a developer that is concerned about database design,
migrations might not be for you.
حسنا، هذا جيد، يمكنني علاج قاعدة البيانات باعتبارها مجرد مستودع مستمر للبيانات لا تحتوي على أي منطق أعمال. بمعنى آخر، ملف نصي مشعر.
ما لا أعرف كيفية القيام به هو ربط كائنين معا. خذ على سبيل المثال هذين الطبقتين:
public class Disaster
{
public int DisasterId { get; set; }
public string Name { get; set; }
public DateTime? Date { get; set; }
public IList<Address> Addresses { get; set; }
}
public class Address
{
public int AddressId { get; set; }
public string WholeAddressHereForSakeOfBrevity { get; set; }
}
Disaster
يحتوي على IList
متعددة Addresses
التي ضربتها الكارثة. عندما أستخدم SimpleRepository
لإضافة هذه إلى قاعدة البيانات مع SimpleRepositoryOptions.RunMigrations
, ، يولد الجداول مع جميع الأعمدة، ولكن لا توجد أعمدة أساسية أجنبية كما هو متوقع.
كيف يمكنني ربط هذين معا بحيث عندما اتصل Disaster.Addresses
, ، أحصل على قائمة بجميع المصابين Addresses
ب هل هذا ممكن أو هل يجب علي استخدام activerecord بدلا من ذلك وإنشاء جداول قاعدة البيانات أولا؟ أو هل يجب علي إضافة عمود لمعرف الكارثة إلى Address
ب إذا كان الأمر كذلك، كيف تعمل هذه الطريقة على العديد من العلاقات بين العديد من العلاقات؟
المحلول
من الممكن - أنت فقط تفعل ذلك باليد هو كل شيء. أضف عقارا إلى كارثة تسمى "العناوين" وجعلها مسمجا <> (أو يمكنك أن تجعله Iqueryable إذا كنت تريد ذلك الحمولة كسول). عند استرداد كارثة ما تبذلونها، تأكد من استرداد عناوينك.
إنه نوع من "دليل" - لكن هذه هي الفكرة. أنا أعمل على تحسينات لذلك آمل أن أدفع في إصدار لاحق.
وقبل أن تسأل لماذا لم أفعل ذلك في المقام الأول :) لأنني لا أعرف إذا كان يجب أن أستخدم الكثير إلى الكثيرين أو 1 - العديد منهم على علاقة الوالد / الطفل. في مثالك، أعتقد أنه ربما 1 إلى الكثيرين ولكن بالنظر إلى ما أعرفه عن العناوين والكوارث (خاصة في فلوريدا) ربما كان من المحتمل أن يكون الكثير للكثيرين.
خلاصة القول - كيف سيكون من الخدمة الذاتية تعرف هذا؟ يمكننا أن نخفف من كلا الكائنات الخاصة ب "الاتجاهات الثنائية"، مما يعني أن العنوان يحتوي على العديد من الكوارث أكثر من الكثيرين بالنسبة للكثيرين (وهو أمر واضح) - ولكن بعد ذلك ليس الترميز السعيد إذا كنت تحب DDD.
أنا أتميل نحو تلك القاعدة مع نوع من التجاوزات التي من شأنها أن يجبر المشكلة. أفكارك حول هذا الترحيب :)