Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在nHibernate标准(Asp.Net MVC4)中没有关联_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Nhibernate - Fatal编程技术网

C# 在nHibernate标准(Asp.Net MVC4)中没有关联

C# 在nHibernate标准(Asp.Net MVC4)中没有关联,c#,asp.net,asp.net-mvc,asp.net-mvc-4,nhibernate,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Nhibernate,我正在使用以下代码从表tMenu获取数据。但它返回了一个错误 “不是关联:MenuID” 公共虚拟IList GetMenuByRole(字符串RoleID) { 尝试 { ICriteria criteria=nHibernateHelper.OpenSession().CreateCriteria(typeof(fosenties.MenuSecurity),“MenuSecurity”); CreateAlias(“MenuSecurity.MenuID”,“Menu”,NHibernat

我正在使用以下代码从表tMenu获取数据。但它返回了一个错误 “不是关联:MenuID”

公共虚拟IList GetMenuByRole(字符串RoleID)
{
尝试
{
ICriteria criteria=nHibernateHelper.OpenSession().CreateCriteria(typeof(fosenties.MenuSecurity),“MenuSecurity”);
CreateAlias(“MenuSecurity.MenuID”,“Menu”,NHibernate.SqlCommand.JoinType.InnerJoin);
CreateAlias(“MenuSecurity.RoleID”,“Roles”,NHibernate.SqlCommand.JoinType.InnerJoin);
添加(Restrictions.Eq(“Roles.RolesID”,RoleID));
criteria.SetProjection(新的IProjection[]{Projections.ProjectionList())
.Add(Projections.Property(“Menu.MenuID”),“MenuID”)
.Add(Projections.Property(“Menu.MenuName”),“MenuName”)
});                
IList菜单=criteria.List();
返回菜单;
}
捕获(例外情况除外)
{
掷骰子;
}
}

请帮帮我。

语句
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);

有关更多详细信息,请参见

Kohler,我在相应的类中有弹出属性。我更改了如下条件,现在得到一个错误“value”System.Object[]”不是“fosenties.Menu”类型,不能在这个通用集合中使用。参数名:value“我明白了。这与我们使用了投影的事实有关。因此,结果不再是
MenuSecurity
,而是不同的对象。因此,我们接收的是
对象[]
的数组。我的意思是,结果应该是:
var menu=criteria.List()或者,我们可以使用结果转换器。请检查我答案中的链接并搜索
SetResultTransformer
(甚至谷歌)。。。转换是不同的主题…;)
criteria.CreateAlias("MenuSecurity.Menu", "Menu" , NHibernate.SqlCommand.JoinType.InnerJoin);
criteria.CreateAlias("MenuSecurity.Role", "Roles", NHibernate.SqlCommand.JoinType.InnerJoin);