通过部分类重命名LINQ 2 SQL实体属性

时间:2009-04-12 14:52:40

标签: linq-to-sql naming rename

我可以使用partial类来创建指向L2S设计器生成的关联属性的属性。另外,我可以在查询中使用新属性吗?

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您只想为关联属性指定其他名称,只需使用关联的“属性”页面并重命名父属性和/或子属性。这将改变类中EntityRef / EntitySet的名称。

编辑:在分部类中使用单独属性的缺点是LINQ在生成查询时将无法使用它 - 实质上您将被迫总是获取实体在您可以使用对象上的相关属性之前。通过重命名,您允许LINQ在构造查询时使用相关属性,从而可以提高查询效率。例如,如果要获取相关实体具有特定属性值的实体,则使用属性修饰实体将允许LINQ生成SQL以从数据库中提取那些匹配值。使用naive属性实现(简单地引用底层关系属性,实际上重命名它),您将被迫首先获取所有实体,然后在您的应用程序中进行过滤。

答案 1 :(得分: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();
        }