سؤال

ولدي كيان الشخص الذي يحتوي على عنوان ككائن القيمة:

public Person()
{
    WithTable("Person");
    Id(x => x.Id);
    Component<Address>(x => x.Address, a =>
    {
        a.Map(x => x.Address1);
        a.Map(x => x.Address2);
        a.Map(x => x.Address3);
        a.Map(x => x.Town);
        a.Map(x => x.Postcode);
    });
}

وينص في مستندات NHibernate أنه إذا كان كل خصائص كائن قيمة (Address1، Address2 الخ) لاغية، سيتم تعيين المكون بأكمله لاغيا (أي Person.Address سيكون لاغيا). هذا هو إعطائي المشاكل في الحالات التي يكون فيها جميع المجالات عنوان باطلة لأنه في صفحاتي حيث أنني قد يكون (أفعله ASP MVC):

<%= Html.TextBoxFor((x => x.Address.Address1))%>

وهذا يكسر مع استثناء مرجع فارغة. لذلك أنا أبحث عن وسيلة نظيفة لوضع عنوان كعنوان جديد () بدلا من الاعتراض لاغية إذا كانت جميع الحقول فارغة عندما كنت تحميل شخص من قاعدة البيانات دون القيام بذلك يدويا. لقد مخفضة الأفكار التالية:

والقيام فحص باطلة من وجهة نظري (يوك، الرهيبة)

وجعل حقول قاعدة البيانات لا للقيم الفارغة (أنا التعامل مع قاعدة بيانات القديمة)

وأي شخص أي أفكار؟

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

المحلول

وليس لدي أي إجابات قاطعة خلق استرجاع طريقة / الممتلكات التي لم يتم تعيينها، والتي تقوم بإرجاع / خالية الكائن الافتراضي إذا كان العنوان الفعلي لاغيا.

public Address GetAddressOrDefault()
{
  return Address ?? new NullAddress();
}

وأو ما شابه ذلك لأول مرة، إنشاء مجمع لAddress الخاصة بك التي تستخدمها في طريقة العرض.

public class AddressViewData
{
  private Address address;

  public AddressViewData(Address address)
  {
    this.address = address ?? new NullAddress();
  }

  // expose all address properties as pass-throughs
  public string Street
  {
    get { return address.Street; }
  }
}

نصائح أخرى

وبفضل الأفكار جيمس (انظر جوابه وتعليق) لقد تعديل الخاصية عنوان الكيان شخص من بلدي:

public virtual string Address { get; set; }

إلى:

private Address _address;
public virtual Address Address
{
    get { return _address ?? new Address(); }
    set { _address = value; }
}

لقد حلت هذه المشكلة بلدي، وأنها تعمل، ويبدو للعمل مع NHibernate. YEY!

في بعض الحالات فمن السهل جدا لكتابة نوع مخصص NHibernate. بدلا من وضع المكون لاغية، فإنه يعود وجوه لاغية. لم هذا في بعض الحالات، ثم يمكنك نسيان بالقيم الخالية.

مثال على نوع المستخدم مركب .

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