質問

サブソニック3.0のT4テンプレートを使用してクラスや私にとってそのようなものを生成しています。私のデータベースでは、これらの列を持つzipcodeテーブルがあります

  • zipcode_rid
  • zipcode(Number Formatの実際のzipcode)
  • 状態
  • etc

まあ、T4テンプレートがZipcode.Zipcodeのような列を持つのではなく、Zipcode.ZipcodeXを取得するのではなく、実行されます。その後、このテーブル全体で簡単なクエリを実行しようとすると、暗号エラー

が表示されます。

メンバー 'zipcodex'はサポートされていません

このクエリはこのようなシンプルなものです

var z= from z in Zipcode.All()
       where (z.ZipcodeX == "12345")
       select z;
.

サブソンのバグや私は何かをめちゃくちゃにしていますか?どんな回避策がありますか?

Zipcode列の名前をZipCodeに名前変更することで、この問題を一時的に取り組んでいます。しかし、これは非常に良い長期ソリューションではありません。

役に立ちましたか?

解決

これはサブソンのバグであり、あなたは何か悪いことをしています。現在サブソニックはそれらを含むテーブルと同じ名前の列をサポートしません。テンプレートはxを列名に追加することによってこれを回避しようとしますが、サブソックスコアは吹き飛ばされます。

修正はあなたの列またはテーブルの名前を変更することです、zipcode.zipcodeは私には意味がないかもしれません。zipcode.codeはより適切になるでしょう。

他のヒント

これがうまくいくかどうかわかりませんが、試してみることができます。それは少し痛みですが、私はそれを行くようにしました。

ステップ1 settings.ttinclude関数

があります

String Cleanup(String TableName)

その下の新しいものを作成する(

が好きな拡張子/名前変更アルゴリズムを追加する

String Cleanup(String ColName、String TableName){

  string result=colName;

  //strip blanks
  result=result.Replace(" ","");

  //put your logic here...
  if (result.ToLower() == tableName.ToLower())
  {
      result = colName + "X";
  }

  return result;
.

}

ステップ2 SQLServer.ttinclude(またはデータソースの同等のファイル)では、ライン167行のようなものがあります。

col.cleanname= cleanup(col.name);

これを変更してください。

col.cleanname= cleanup(col.name、tbl.name);

ステップ3 これが痛みが本当に始まる場所です。 subsicsetable.csの変更

のソースコードをつかみます。

    public IColumn GetColumnByPropertyName(string PropertyName)
.

    public virtual IColumn GetColumnByPropertyName(string PropertyName)
.

ステップ4

の後のstructs.tt

パブリック静的文字列<#= col.cleanname#>列{ 取得する{ "<#= col.name#>"を返します。 } }

次の追加

<#if(col.cleanname!= col.name){#>

       public override IColumn GetColumnByPropertyName(string columName){
           if (columName == "<#= col.CleanName #>")
               return <#=col.CleanName#>;
            else
               return base.GetColumnByPropertyName(columName);
        }
.

<#}#>

これを行った後のすべての.csファイルを再生成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top