我目前正在评估SubSonic 3与遗留数据库一起使用 - IE几乎没有能力改变当前的结构。
长话短篇SubSonic 2很好地处理了我们的复合外键 - 但是我们正在寻找能够提供linq以及SS3所有其他功能的东西。
到目前为止,我发现使用ActiveRecord.tt和Classes.tt T4模板的SS3我的关系非常混乱。
我注意到如果属性后缀为“x”,则外键中的逻辑不包含“x” - 示例生成的代码如下。
#region Properties
partial void OnAUDIT_TYPEXChanging(int value);
partial void OnAUDIT_TYPEXChanged();
private int _AUDIT_TYPEX;
public int AUDIT_TYPEX {
get{
return _AUDIT_TYPEX;
}
set{
this.OnAUDIT_TYPEXChanging(value);
this.SendPropertyChanging();
this._AUDIT_TYPEX = value;
this.SendPropertyChanged("AUDIT_TYPEX");
this.OnAUDIT_TYPEXChanged();
}
}
#region Foreign Keys
public IQueryable<COMPANY_AUDIT_TYPE> COMPANY_AUDIT_TYPES
{
get
{
var db=new DB();
return from items in db.COMPANY_AUDIT_TYPES
where items.AUDIT_TYPE == _AUDIT_TYPE // ERROR HERE NO "X" SUFFIX, SHOULD BE _AUDIT_TYPEX
select items;
}
}
当发生器到达复合键时,它们也会完全死亡。它们生成四个并开始混合comparsomes,而不是生成一个属性。看下面生成的代码
#region Foreign Keys
public IQueryable<EMPLOYEE> EMPLOYEES
{
get
{
var db=new DB();
return from items in db.EMPLOYEES
where items.COMPANY_ID == _COMPANY_ID
select items;
}
}
public IQueryable<EMPLOYEE> EMPLOYEES1
{
get
{
var db=new DB();
return from items in db.EMPLOYEES
where items.EMPLOYEE_NUM == _COMPANY_ID
select items;
}
}
public IQueryable<EMPLOYEE> EMPLOYEES2
{
get
{
var db=new DB();
return from items in db.EMPLOYEES
where items.COMPANY_ID == _EMPLOYEE_NUM
select items;
}
}
public IQueryable<EMPLOYEE> EMPLOYEES3
{
get
{
var db=new DB();
return from items in db.EMPLOYEES
where items.EMPLOYEE_NUM == _EMPLOYEE_NUM
select items;
}
}
理想情况下它会生成
#region Foreign Keys
public IQueryable<EMPLOYEE> EMPLOYEES
{
get
{
var db=new DB();
return from items in db.EMPLOYEES
where items.COMPANY_ID == _COMPANY_ID && EMPLOYEE_NUM == _EMPLOYEE_NUM
select items;
}
}
SS3是否正确支持复合外键,我的结果让我担心它没有。