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 回答