2

各列に拡張プロパティを持つ SQL テーブルがあります。

Linq2SQL を使用して c# で LINQ からこれらにアクセスする方法はありますか?

4

3 に答える 3

1

「MS_Description」など?AFAIKではありません。データベースのストアと通信するSPを作成し(データベースオブジェクト名と列名を取得)、データコンテキストを介してクエリを実行できますが、何も組み込まれていません。

Expressionまた、(OO名の代わりに)データベース名を渡すために使用するコードを作成するのも非常に簡単です。次のようなものです。

    public static string GetProperty<TContext, TValue>(
        this TContext ctx, Expression<Func<TContext, TValue>> selector,
        string propertyName)
        where TContext : DataContext
    {
        MemberExpression me = selector.Body as MemberExpression;
        if (me == null) throw new InvalidOperationException();
        var member = me.Member;
        var objType = me.Expression.Type;
        var metaType = ctx.Mapping.GetMetaType(objType);
        string tableName = metaType.Table.TableName;
        string columnName = metaType.GetDataMember(member).MappedName;

        return ctx.GetProperty(tableName, columnName, propertyName);
    }

(または同様のもの。テストデータベースを起動するだけです...)

GetPropertyマップされたSPROCを介してメソッドを提供する場合。

更新:はい、それはちょっとうまくいきます。例:

string desc = ctx.GetProperty(x => x. DataChanges.First().Change, "MS_Description");

これFirst()は苦痛ですが、2つのセレクターが必要になるよりも醜いものではありません。ただし、そのように書き直すことができます。

string desc = ctx.GetProperty(x => x.DataChanges, dc => dc.Change, "MS_Description");

ハッキーが少ないあなた次第です。所有者をから分割する必要があることにも注意してくださいtableName

于 2009-09-28T11:22:03.190 に答える
0

それらにどのような方法でアクセスしますか? VS 2008 用の私の L2S アドインは、それらを xml ドキュメント コメント (VS インテリセンスに表示されるようにするため) と説明属性 [コードからアクセスできる] に変換できます。http://www.huagati.com/dbmltools/で「データベースからのドキュメントの更新」機能を参照してください...

于 2009-09-28T16:22:55.630 に答える
0

DBにビューを作成して、sysビューから必要なすべての情報を選択できます-sys.extended_propertiesビュー(SQL2005以降)から始めて、必要に応じて他のビューに参加します(あなたの場合はsys.tablesとsys.all_columnsだと思います)。次に、そのビューをモデルの VS にインポートするだけです。

または、SMO を使用して、テーブル、列などの拡張プロパティを含むすべての SQL Server メタデータにアクセスすることもできます。それは LINQ to Objects になると思いますが。ちなみに、これは、この情報をクエリする唯一の (SQL Server のバージョン間で) 移植可能な方法です。

http://msdn.microsoft.com/en-us/library/ms162557.aspx

于 2011-11-07T21:01:56.910 に答える