هل من الممكن استخدام اتفاقية Nhibernate بطلاقة لرسم خريطة لجميع ICollections كمجموعات؟
-
22-09-2019 - |
سؤال
هل من الممكن استخدام اتفاقية Nhibernate بطلاقة لرسم خريطة لجميع ICollections كمجموعات؟ لدي كيان مثل ذلك:
public class NoahsArk
{
public virtual ICollection<Animal> Animals { get; set; }
public NoahsArk()
{
Animals = new HashSet<Animal>();
}
}
مع التعيينات بطلاقة ، سيتم تعيين هذه الخاصية HasMany(x => x.Animals).AsSet()
, ، لكن كيف يمكنني القيام بذلك مع اتفاقية أريد استخدامها مع السيارات؟
يجب أن أضيف ذلك بشكل افتراضي ، ICollections
الحصول على استمرار ILists
, ، وأحصل على استثناء من الممثلين عندما يحاول أن يلقي HashSet
ل IList
.
المحلول
هذا غير ممكن في الاتفاقية ، حاليا. إذا كنت تريد أن تعامل Automapper لمجموعاتك على أنها مجموعات افتراضيًا ، فاستخدمها ISet
بدلاً من ICollection
.
نصائح أخرى
للإستجابة ل سؤال كريستينا, ، عليك إنشاء فئة جديدة تنفذها IAutoMappingOverride<T>
:
public class AlbumOverride : IAutoMappingOverride<Album>
{
public void Override(AutoMapping<Album> mapping)
{
mapping.HasMany(x => x.Pictures).AsSet().Inverse();
}
}
ثم أخبر FNH باستخدامه في التكوين:
Fluently.Configure()
.Database(...)
.Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
.UseOverridesFromAssemblyOf<Album>()))
.BuildConfiguration();
ستحتاج إلى فئة تجاوز جديدة لكل كيان تحتاج إلى تجاوزه ، لكنه في الغالب علاقة نسخة ولصق.