sql >> データベース >  >> RDS >> Mysql

SubSonic 3およびMySQL、CleanUp()メソッドの列名からアンダースコアを削除すると、linq-queryでプロパティを使用するときに例外が発生します

    何ヶ月もの間、これは私にとって問題であり、サポートされているDBでSubSonicを使用するときは、アンダースコアを避けました。昨日まで、SQLServerデータベースにアンダースコアが含まれているレガシープロジェクトをサポートする必要がありました。

    SubSonic.Coreのソースコード(ファイル:SubSonic.Core \ Schema \ DatabaseTable.cs)内で修正する必要があります:

    この方法を見つける:

    public IColumn GetColumnByPropertyName(string PropertyName)
    {
        return Columns.SingleOrDefault(x => x.Name.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
    }
    

    そして、次のように変更します:

    public IColumn GetColumnByPropertyName(string PropertyName)
    {
        return Columns.SingleOrDefault(x => x.PropertyName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
    }
    

    次に、 Structs.ttを変更する必要があります :

    上部にあるこれを見つけてください:

    Columns.Add(new DatabaseColumn("<#=col.Name#>", this)
    {
        IsPrimaryKey = <#=col.IsPK.ToString().ToLower()#>,
        DataType = DbType.<#=col.DbType.ToString()#>,
        IsNullable = <#=col.IsNullable.ToString().ToLower()#>,
        AutoIncrement = <#=col.AutoIncrement.ToString().ToLower()#>,
        IsForeignKey = <#=col.IsForeignKey.ToString().ToLower()#>,
        MaxLength = <#=col.MaxLength#>
    });
    

    そして、次の行を追加します:

        PropertyName = "<#=col.CleanName#>",
    

    次のようになります:

    Columns.Add(new DatabaseColumn("<#=col.Name#>", this)
    {
        PropertyName = "<#=col.CleanName#>",
        IsPrimaryKey = <#=col.IsPK.ToString().ToLower()#>,
        DataType = DbType.<#=col.DbType.ToString()#>,
        IsNullable = <#=col.IsNullable.ToString().ToLower()#>,
        AutoIncrement = <#=col.AutoIncrement.ToString().ToLower()#>,
        IsForeignKey = <#=col.IsForeignKey.ToString().ToLower()#>,
        MaxLength = <#=col.MaxLength#>
    });
    

    問題は、列名をクリーンアップすると、SubSonicが生成したプロパティ名と照合して、クエリ内の有効な列を見つけようとすることです。 データベースの元の列名に対して 。

    これらの変更により、SubSonicがクリーンアップされたプロパティ名と確実に一致するようになります。 。




    1. 別のテーブルのMAX値を使用してMySQLAutoIncrementをリセットするにはどうすればよいですか?

    2. アプリケーションユーザーと行レベルのセキュリティ

    3. MacOS10.6.2のDjango+MySQL Snow Leopard

    4. MySQLで2つの自動インクリメント列を作成するにはどうすればよいですか?