1

部分クラスを使用して、L2S デザイナーによって生成された関連付けプロパティを指すプロパティを作成できますか? また、クエリで新しいプロパティを使用できますか?

どうすればこれを達成できますか?

4

2 に答える 2

2

関連付けプロパティに別の名前を付けたい場合は、関連付けの [プロパティ] ページを使用して、親および/または子プロパティの名前を変更します。これにより、クラス内の EntityRef/EntitySet の名前が変更されます。

編集:部分クラスで別のプロパティを使用することの欠点は、クエリを生成するときにLINQがそれを使用できないことです-基本的に、オブジェクトで関連するプロパティを使用する前に、常にエンティティを取得する必要があります. 名前を変更することで、LINQ が関連するプロパティを使用してクエリを作成できるようになり、より効率的なクエリを作成できるようになります。たとえば、関連するエンティティが特定のプロパティ値を持つエンティティを取得する場合、属性修飾エンティティを使用すると、LINQ で SQL を生成して、一致する値だけをデータベースから取得できます。単純なプロパティの実装 (基礎となるリレーション プロパティを参照し、実質的に名前を変更するだけ) では、最初にすべてのエンティティを取得してから、アプリケーションでフィルタリングを行う必要があります。

于 2009-04-12T14:54:45.457 に答える
1

はい、できますが、linq2sql で生成されたプロパティと同じ属性を適用する必要があります。

    [Association(Name="Test_TestData", Storage="_TestDatas", ThisKey="SomeId", OtherKey="OtherId")]
    public System.Data.Linq.EntitySet<TestData> MyTestDatas
    {
        get
        {
            return this.TestDatas;
        }
    }

TestDatas が元のリレーションです。

更新:私が実行したサンプルクエリ:

        var context = new DataClasses1DataContext();
        var tests =
            from d in context.Tests
            where d.MyTestDatas.Any(md=>md.MyId == 2)
            select new
            {
                SomeId = d.SomeId,
                SomeData = d.SomeData,
                Tests = d.MyTestDatas
            };
        foreach (var test in tests)
        {
            var data = test.Tests.ToList();
        }
于 2009-04-12T15:04:06.777 に答える