2009-04-12 76 views

回答

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(); 
     } 
2

如果您只是想为关联属性赋予不同的名称,只需使用关联的属性页面并重命名父项和/或子项属性即可。这将改变该类中的EntityRef/EntitySet的名称。

编辑:在部分班级使用一个单独的属性的缺点是,LINQ将无法生成查询时使用它 - 本质上,你将被迫总是实体才可以使用对象上的相关属性。通过重命名,您允许LINQ在构建查询时使用相关属性,从而实现更高效的查询。例如,如果您想要获取相关实体具有特定属性值的实体,那么使用属性装饰实体将允许LINQ生成SQL以仅从数据库中提取这些匹配值。使用朴素的属性实现(只是引用底层的关系属性,实际上是重命名它),您将被迫首先获取所有实体,然后在应用程序中执行过滤。

+0

这不是一个可行的方法。当我重新生成模型时,这些更改被覆盖:( – 2009-04-12 14:56:10

+0

+1这是一个实用的方法。Linq2sql没有重新生成模型按钮,在设计器中进行更改是其中的一部分。在你的问题上的信息 – eglasius 2009-04-12 14:59:10