2

Web アプリケーションに SubSonic 2.1 を使用しています。最近まで、SQL Server 2005 データベースにテーブルを追加して、ユーザー ファイル (MS Word、PDF、Jpeg、Gif、Tiff ファイルなど) を保存するまで問題なく動作していました。ファイルは ReportFile varbinary(max) という列に保存されます。

SubSonic がコードを生成した後、それをビルドすると、次のエラーが発生します。

'System.Array' には 'Columns' の定義が含まれておらず、タイプ 'System.Array' の最初の引数を受け入れる拡張メソッド 'Columns' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

問題のある方法:

public MyWebApp.ReportFileCollection ReportFiles()
{
    return newMyWebApp.ReportFileCollection().Where(ReportFile.Columns.ReportID, ReportID).Load();
}

次に、ファイル ReportFile.cs を確認したところ、列が構造体として定義されていることがわかりました。

#region Columns Struct
public struct Columns
{
     public static string ReportFileID = @"ReportFileID";
     public static string FileName = @"FileName";
     public static string ReportID = @"ReportID";
     public static string MimeType = @"MimeType";
     public static string FileSize = @"FileSize";
     public static string FileData = @"FileData";
     public static string UploadDate = @"UploadDate";

}
#endregion

varbinary(max) 列に関係があるのではないかと考えていたので、varbinary(max) 列を持つテーブルも含む Test データベースでコードの生成をテストしたところ、完全に機能しました。

このエラーのため、この ReportFiles メソッドをコメントアウトする必要があります。誰でもこれについて知っていますか?私には不思議です。回避策はありますか?どうもありがとう。

4

2 に答える 2

1

すでに宣言されている名前空間の 1 つとの名前の競合のように思えます。おそらく、あなたが見ているエラーは、すべての真実を伝えているわけではありません. 列の名前を競合しない値に変更するには、web.config でregexDictionaryReplaceを使用する必要がある場合があります。

于 2009-08-24T17:36:45.017 に答える
0

このサーバー側のエラーを解決するには、次の名前空間を追加するだけです。

using System.Linq;

ソースの上部にあるSystem.Coreアセンブリへの参照があることを確認してください。

于 2014-08-01T10:55:07.253 に答える