簡體   English   中英

在nHibernate標准中不存在關聯(Asp.Net MVC4)

[英]Not an association in nHibernate criteria (Asp.Net MVC4)

我正在使用以下代碼從表tMenu獲取數據。 但它返回錯誤“不是關聯:MenuID”

 public virtual IList<FOSEntities.Menu> GetMenuByRole(string RoleID)
    {
        try
        {
            ICriteria criteria = nHibernateHelper.OpenSession().CreateCriteria(typeof(FOSEntities.MenuSecurity), "MenuSecurity");
            criteria.CreateAlias("MenuSecurity.MenuID", "Menu", NHibernate.SqlCommand.JoinType.InnerJoin);
            criteria.CreateAlias("MenuSecurity.RoleID", "Roles", NHibernate.SqlCommand.JoinType.InnerJoin);
            criteria.Add(Restrictions.Eq("Roles.RolesID", RoleID));

            criteria.SetProjection(new IProjection[] { Projections.ProjectionList()
            .Add(Projections.Property("Menu.MenuID"), "MenuID")                
            .Add(Projections.Property("Menu.MenuName"), "MenuName")
             });                
            IList<Menu> menu = criteria.List<FOSEntities.Menu>();
            return menu;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

請幫幫我..

語句criteria.CreateAlias("MenuSecurity.MenuID", ...)似乎(由於通用的命名約定)加入了int屬性MenuID 而這不是NHibernate透視的關系/關聯如何工作的方式。

我們需要具有C#實體屬性

public virtual Menu Menu { get; set; }
public virtual Role Role { get; set; }
// instead of
// public virtual int MenuID { get; set; }
// public virtual int RoleID { get; set; }

然后像這樣加入他們:

criteria.CreateAlias("MenuSecurity.Menu", "Menu" , NHibernate.SqlCommand.JoinType.InnerJoin);
criteria.CreateAlias("MenuSecurity.Role", "Roles", NHibernate.SqlCommand.JoinType.InnerJoin);

15.4。 協會了解更多詳情

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM