هل يستطيع AutoMapper الخاص بـ Fluent NHibernate التعامل مع أنواع الواجهة؟

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

سؤال

لقد كتبت هذا المثال المبسط دون الاستفادة من IDE، لذا سامحوني على أي أخطاء في بناء الجملة.عندما أحاول تعيين هذا تلقائيًا، أحصل على FluentConfigurationException عندما أحاول تجميع التعيينات -

"يشير الاقتران إلى فئة غير معينة IEmployee."

أتخيل أنه إذا قمت بحل هذه المشكلة، فسوف أتلقى خطأً مشابهًا عندما يواجه الإشارة إلى IEmployer أيضًا.أنا لا أعارض إنشاء ClassMap يدويًا ولكني أفضل أن يقوم AutoMapper بذلك بدلاً من ذلك.

public interface IEmployer 
{ 
  int Id{ get; set; } 
  IList<IEmployee> Employees { get; set; } 
} 

public class Employer: IEmployer 
{ 
  public int Id{ get; set; } 
  public IList<IEmployer> Employees { get; set; } 
  public Employer() 
  { 
    Employees = new List<IEmployee>(); 
  } 
} 

public interface IEmployee 
{ 
  int Id { get; set; } 
  IEmployer Employer { get; set; } 
} 

public class Employee: IEmployee 
{ 
  public int Id { get; set;} 
  public IEmployer Employer { get; set;} 
  public Employee(IEmployer employer) 
  { 
    Employer = employer; 
  }
}

لقد حاولت استخدام .IncludeBase<IEmployee>() ولكن دون جدوى.يبدو الأمر وكأنني لم أتصل مطلقًا بـ IncludeBase على الإطلاق.

هل الحل الوحيد هو عدم استخدام الواجهات في كيانات المجال الخاص بي أو الرجوع إلى ClassMap محدد يدويًا؟

يخلق أي من الخيارين مشكلة كبيرة في طريقة تصميم طلبي.لقد تجاهلت الإصرار حتى انتهيت من تنفيذ كافة الميزات، وهو خطأ لن أكرره مرة أخرى :-(

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

المحلول

إنه ليس قيدًا مفروضًا بواسطة Fluent أو AutoMapper الخاص به، ولكن بواسطة NHibernate نفسها.

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

نصائح أخرى

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.Id);
        Map<Address>(x => x.Address); // Person.Address is of type IAddress implemented by Address
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top