ServiceStack.ORMLite“解析”外键

时间:2014-04-29 23:45:26

标签: c# .net servicestack ormlite-servicestack

有没有办法做一些像Join这样的东西,而不需要为结果值创建一个新的保持对象?例如,如果我有以下内容:

public class Patient
{
   [Alias("PatientId")]
   [Autoincrement]
   public int Id { get; set; }
   [ForeignKey(typeof(Gender))]
   public int GenderId { get; set; }
   public string Name { get; set; }
}

public class Gender
{
   [Alias("GenderId")]
   [Autoincrement]
   public int Id { get; set; }
   public string GenderName { get; set; }
}

我想在单独的表中存储诸如Gender,Race等几个属性,以便在Web应用程序的前端提供表单中的过滤器,并且还具有规范化的数据库。我已经看到了ORMLite的光在某些数据字段(如地址)的区域中,这些字段在其他任何地方都不会被使用,但我想我想坚持使用这种类型信息的标准数据库结构。

那就是说,我知道我可以做一个Join来获得像这样的GenderName:

public class PatientJoined
{
    [BelongTo(typeof(Patient))]
    public int PatientId { get; set; }
    [BelongTo(typeof(Patient))]
    public string Name { get; set; }
    [BelongTo(typeof(Gender))]
    public string GenderName { get; set; }
}

public class PatientService : Service
{
    //Database connection code, resulting in dbConn as IDbConnection object

    public object Get(PatientRequest request)
    {
        var jn = new JoinSqlBuilder<PatientJoined, Patient>();
        jn = jn.Join<Patient, Gender>(x => x.GenderId, x => x.GenderName)
        .Where<Patient>(x => x.Name = request.Name);

        var jnSQL = jn.ToSql();
        var result = dbConn.Select<PatientJoin>(jnSQL);

        return result;
    }
}

这很好用,除了我需要一个几乎重复的POCO对象和大量的“[BelongTo]”装饰器来解析一些外键值。随着这些物体变大,这变得非常麻烦,不是吗?

我在想可能有类似“LoadReferences”方法的东西可以自动化存在ForeignKey的Joins,然后让你访问所有相关表的字段。

也许会有一种方法在原始POCO中使用[Ignore]添加额外的字段,这样它们就不会在数据库中结束了。类似的东西:

public class Patient
{
   [Alias("PatientId")]
   [Autoincrement]
   public int Id { get; set; }
   [ForeignKey(typeof(Gender))]
   public int GenderId { get; set; }
   [Ignore]
   public string GenderName { get; set; }
   public string Name { get; set; }
}

然后,如果我们可以解析并访问ForeignKey引用,我们可以将“Gender.GenderName”分配给Patient.GenderName。

我有一种感觉,我正在黑暗中寻找这个,但我还是要问....谢谢!

0 个答案:

没有答案