我可以使用partial类来创建指向L2S设计器生成的关联属性的属性。另外,我可以在查询中使用新属性吗?
我怎样才能做到这一点?
答案 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();
}