有没有办法做一些像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。
我有一种感觉,我正在黑暗中寻找这个,但我还是要问....谢谢!