كيف يمكنني الوصول إلى خاصية مع جهاز محمي في وحدة تحكم ASP.NET-MVC الخاصة بي من Nhibernate بطلاقة؟

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

سؤال

باستخدام S#ARP Architecture 1.0rc ...

لديّ وحدة تحكم لا يبدو أنه لا يقوم بتحديث أحد خصائقي.

صفي هو فئة مجردة المستخدم مع خاصية مدير. المدير هو فئات فرعية من المستخدم ، وكذلك الموظف.

أعلنت أن Setter Property Setter للمدير كما هو محمي وقدمت طريقة لـ AddManager. وبهذه الطريقة ، يمكنني أيضًا التحكم في المستخدمين الذين لدى المدير من المجموعة في هذا الكيان.

مشكلتي هي أن نموذج الطراز لا يحدد موقع خاصية المدير للعنصر المحدث على Postback. إذا قمت بإزالة الحماية ، فهو يعمل بشكل جيد. أضف الظهر المحمي: لا حساء بالنسبة لي.

ما هو جزء مما يلي يسمح لي بالحفاظ على حماية Setter الخاصة بي ولا يزال يحصل على القيمة في وحدة التحكم على Postback؟

شكرًا...

إليك التعيين الإلزامي (بعض التحريرات من غير المفصلات):

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="">
  <class name="Core.User, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Users" xmlns="urn:nhibernate-mapping-2.2">
    <id name="Id" type="Int32" unsaved-value="0" column="UserId">
        <generator class="identity" />
    </id>
 <le snip..>
<many-to-one access="field.camelcase-underscore" cascade="save-update" name="Manager" column="ManagerId" />
<joined-subclass name="Core.Employee, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
  <key column="EmployeeId" />
</joined-subclass>
<joined-subclass name="Core.Approver, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
  <key column="ManagerId" />
  <bag name="Users" lazy="true" cascade="save-update" inverse="true">
    <key column="ManagerId" />
    <one-to-many class="Core.User, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  </bag>
</joined-subclass>

صفي متعدد الأشكال

public abstract class User : Entity
{
    public virtual string Name { get; set; }
    private Manager _manager;
    public virtual Manager Manager
    {
        get { return _manager; }
        protected set { _manager = value; }
    }

    public virtual void SetManager(Manager manager)
    {
        if (_manager != null)
        {
            _manager.RemoveUser(this);
        }
        _manager = manager;
    }

}


public class Manager : User
{
    public Manager()
    {
        _users = new List<User>();
    }

    private IList<User> _users;
    public virtual IList<User> Users
    {
        get { return _users; }
        protected set { _users = value; }
    }

    public virtual void AddUser(User user)
    {
        if (_users.Contains(user)) return;
        Users.Add(user);
        user.SetManager(this);
    }

    public virtual void RemoveUser(User user)
    {
        if (!_users.Contains(user)) return;
        Users.Remove(user);
        user.SetManager(null);
    }
}
هل كانت مفيدة؟

المحلول

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

السيارات على codeplex

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