.net 亚音速3 ActiveRecord问题-空白数据

.net 亚音速3 ActiveRecord问题-空白数据,.net,activerecord,subsonic,subsonic3,.net,Activerecord,Subsonic,Subsonic3,当我检查我的一个业务实体的.Columns属性时,我缺少Table和PropertyName的值。我从Take(5)之类的东西中获得了正确的记录数,但所有5个对象都将充满空字符串和0值 只是用另一个SQL连接和同样的东西试过了?我应该从哪里开始对此进行故障排除 其他信息和代码: // Replacing the CleanUp function seems to be cause // What am I doing here that is not allowed? // I'm dealin

当我检查我的一个业务实体的.Columns属性时,我缺少Table和PropertyName的值。我从Take(5)之类的东西中获得了正确的记录数,但所有5个对象都将充满空字符串和0值

只是用另一个SQL连接和同样的东西试过了?我应该从哪里开始对此进行故障排除

其他信息和代码:

// Replacing the CleanUp function seems to be cause
// What am I doing here that is not allowed?
// I'm dealing with Table names like USER_DETAILS and would prefer UserDetail  
// rename standard CleanUp to CleanUp2 then paste this into Settings.ttinclude
string CleanUp(string tableName)
{
    string res = tableName;
    //capitalization
    char[] ca = res.ToLower().ToCharArray();
    for (int i = 0; i < ca.Length; i++) {
      if ((i == 0) || (ca[i - 1] == '_')) {
            ca[i] = char.ToUpper(ca[i]);
      }         
    }
    res = new string(ca);
    //strip underlines
    res = res.Replace("_","");
    //strip blanks
    res = res.Replace(" ","");
    return res;
}  
//替换清除函数似乎是原因
//我在这里做什么是不允许的?
//我处理的是像USER\u DETAILS这样的表名,我更喜欢userdetails
//将标准清理重命名为CleanUp2,然后将其粘贴到Settings.ttinclude中
字符串清理(字符串表名)
{
string res=表名;
//资本化
char[]ca=res.ToLower().ToCharArray();
对于(int i=0;i
已解决(某种程度上)
看起来正是删除了下划线才导致了所有东西都向南移动。罗伯,这有可能在以后的版本中使用吗?如果您能在源代码中为我指出正确的方向,我将很乐意提供帮助。

如果您能为其中一个表发布您的CREATESQL,这将是一种开始。另外-确保您有主键等。

如果您可以发布一个表的CREATESQL,这将是一种开始。另外,请确保您有主键等。

请注意,我认为这与我上周遇到的第107期相同。

请注意,我认为这与我上周遇到的第107期相同。

我刚刚在我的SubSonic3模板中应用了清理功能。它很好用。但在此之前,我在亚音速内核中做了一些补丁,以便在亚音速对象和表列之间进行通信

  • 首先,我尝试收集要投影的列(ExecutionBuilder.cs-第217行),然后将其添加到字符串列表中
  • 将该列表传递到QueryCommand中 QueryCommand对象知道哪个 将被投影的列(ExecutionBuilder.cs-第233行)
  • 在DbQueryProvider.cs(第297行)中进行一些修改,以便DataReader传递列名列表
  • 最后,DataReader将根据之前传递的字符串列表中的顺序从数据库中插入值(database.cs第158行)

你可以查看我正在做什么的详细信息。

我刚刚在我的SubSonic3模板中应用了你的清理功能。它很好用。但在此之前,我在亚音速内核中做了一些补丁,以便在亚音速对象和表列之间进行通信

  • 首先,我尝试收集要投影的列(ExecutionBuilder.cs-第217行),然后将其添加到字符串列表中
  • 将该列表传递到QueryCommand中 QueryCommand对象知道哪个 将被投影的列(ExecutionBuilder.cs-第233行)
  • 在DbQueryProvider.cs(第297行)中进行一些修改,以便DataReader传递列名列表
  • 最后,DataReader将根据之前传递的字符串列表中的顺序从数据库中插入值(database.cs第158行)

您可以查看我所做的详细信息。

在运行了代码库之后,我认为我已经找到了一个更简单的解决方案(IMHO)

IColumn接口定义了一个“PropertyName”属性,我认为该属性用于指示表类上表示此列的属性的名称(类似于ITable上的“ClassName”属性)。在Structs.tt模板中未设置该值,因此我将其(约第39行)设置为columns CleanName属性的值

然后,这就允许DatabaseTable.cs(约110行)中的GetColumnByPropertyName方法使用PropertyName,而不是使用名称

我将Name属性添加到IColumn接口中,因为这似乎是一个疏忽,这意味着可以修改Load扩展方法(Database.cs circa第143行),以访问传入对象的Columns属性(如果它是IActiveRecord的派生项),并使用它将“Name”映射到“PropertyName”

如果我有时间了解我们的GitHub,我将提交更改

干杯


Gary

在运行了代码库之后,我想我已经找到了一个更简单的解决方案(IMHO)

IColumn接口定义了一个“PropertyName”属性,我认为该属性用于指示表类上表示此列的属性的名称(类似于ITable上的“ClassName”属性)。在Structs.tt模板中未设置该值,因此我将其(约第39行)设置为columns CleanName属性的值

然后,这就允许DatabaseTable.cs(约110行)中的GetColumnByPropertyName方法使用PropertyName,而不是使用名称

我将Name属性添加到IColumn接口中,因为这似乎是一个疏忽,这意味着可以修改Load扩展方法(Database.cs circa第143行),以访问传入对象的Columns属性(如果它是IActiveRecord的派生项),并使用它将“Name”映射到“PropertyName”

如果我有时间了解我们的GitHub,我将提交更改

干杯


加里

我有主键。不确定您所说的创建sql是什么意思。创建表的DDL语句?我用它来对付遗留数据库,在这些数据库中,表结构几乎不会改变。找到您正在寻找的createsql的最佳方法是什么?循环使用.Columns属性?如果您使用的是sql server management studio,只需右键单击该表并选择“脚本表为”->“创建到”->“新建查询窗口”,但我使用的是预先存在的d