هل من الممكن استخدام اتفاقية Nhibernate بطلاقة لرسم خريطة لجميع ICollections كمجموعات؟

StackOverflow https://stackoverflow.com/questions/1990593

سؤال

هل من الممكن استخدام اتفاقية 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();

ستحتاج إلى فئة تجاوز جديدة لكل كيان تحتاج إلى تجاوزه ، لكنه في الغالب علاقة نسخة ولصق.

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