【问题标题】:Postrgresql One-To-Many with MVC3 and jTablePostgresql 一对多与 MVC3 和 jTable
【发布时间】:2013-10-28 17:12:55
【问题描述】:

我是 MVC 应用程序的新手,我遇到了一个非常具体的问题。问题是,我有 2 个课程:“Paciente”和“Analises”。

public class Paciente
{
    public virtual Guid PacienteID { get; set; }
    public virtual string Nome { get; set; }
    public virtual string Sexo { get; set; }
    public virtual DateTime DataDeNasc { get; set; }
    public virtual int IdadeDiag { get; set; }

    public virtual IList<Analises> analises { get; set; } 
}


public class Analises
{
    public virtual Guid AnaliseID { get; set; } 
     // some analysiss values
    public virtual decimal afp { get; set; }
    public virtual decimal hemoglobina { get; set; }
    public virtual DateTime DataDaAnalise { get; set; }
    public virtual Paciente pac { get; set; } 

}

因此,一个患者有多个分析,每个分析有一个患者(一对多)。

我已经用 NHIbernate 和 FluentNHibernate 映射了这个:

public PacienteMap()
    {
        Table("pacientes");
        Id(x => x.PacienteID).GeneratedBy.Guid();
        Map(x => x.Nome);
        Map(x => x.Sexo);
        Map(x => x.DataDeNasc).CustomType("Date");;
        Map(x => x.IdadeDiag);
        HasMany(m => m.analises).Not.KeyNullable().Fetch.Join().KeyColumn("pacienteid"); 
    }



 public AnalisesMap()
    {
        Table("analises");
        Id(x => x.AnaliseID).GeneratedBy.Guid();
        Map(x => x.afp);
        Map(x => x.hemoglobina);
        Map(x => x.DataDaAnalise).CustomType("Date");
        References(x => x.pac).ForeignKey("pacienteid").Not.Nullable();
    }

我的问题是我正在使用 jTable 来显示这一点。我想查看患者列表(它有效),然后是每个患者的分析列表(无效!)

我的控制器是这样的:

 [HttpPost]
    public JsonResult AnalisesList(Guid pacienteId)
    {
        try
        {

            var list_analises = AnalisesRepository.GetPacienteAnalises(pacienteId);   
            var all_analises = Mapper.Map<IEnumerable<Analises>, IEnumerable<AnalisesView>>(list_analises);
            List<AnalisesView> analises = all_analises.ToList();
            return Json(new { Result = "OK", Records = analises });

        }
        catch (Exception ex)
        {
            return Json(new { Result = "ERROR", Message = ex.Message });
        }
    }

我还使用自动映射器从数据库对象的对象视图中获取。

所以,现在,我的分析列表没有显示!我不知道为什么。 GetPacienteAnalises 就像:

 public IList<T> GetPacienteAnalises (Guid pacienteId)
    {
        using (ISession session = SessionManager.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {

                return session.CreateCriteria(typeof(T)).Add(Restrictions.Eq("pacienteid", pacienteId)).List<T>();

            }
        }  
    }

所以,我认为一切正常...但我不断收到“无法解析属性:pacienteid of: Infraestrutura.Models.Analises”。

【问题讨论】:

    标签: c# asp.net-mvc-3 nhibernate jquery-jtable


    【解决方案1】:

    你的问题出在这一行:

    return session.CreateCriteria(typeof(T))
        .Add(Restrictions.Eq("pacienteid", pacienteId))
        .List<T>();
    

    我假设在这种情况下TAnalisesAnalises 没有名为 pacienteid 的属性。相反,它有一个名为pac 的属性。将"pacienteid" 替换为"pac.PacienteID"。创建条件时使用的字段应该是属性名称,而不是列名称。

    return session.CreateCriteria(typeof(T))
        .Add(Restrictions.Eq("pac.PacienteID", pacienteId))
        .List<T>();
    

    如果您按Paciente 的主键以外的其他列进行过滤,例如Nome,则需要连接。在这种情况下,您会执行以下操作:

    session.CreateCriteria(typeof(T))
        .CreateAlias("pac", "p")            // CreateAlias performs an inner join
        .Add(Expression.Eq("p.Nome", name))
        .List<T>()
    

    但无需加入即可到达pac.PacienteID

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      相关资源
      最近更新 更多