我可以使用部分类来创建指向 L2S 设计器生成的关联属性的属性吗?另外,我可以在查询中使用新属性吗?
我怎样才能做到这一点?
如果您只想为关联属性指定不同的名称,只需使用关联的属性页面并重命名父和/或子属性。这将更改类中 EntityRef/EntitySet 的名称。
编辑:在部分类中使用单独属性的缺点是 LINQ 在生成查询时将无法使用它——本质上,您将被迫始终获取实体,然后才能使用对象上的相关属性. 通过重命名,您可以让 LINQ 在构造查询时使用相关属性,从而提高查询效率。例如,如果您想获取相关实体具有特定属性值的实体,则使用属性修饰实体将允许 LINQ 生成 SQL 以仅从数据库中提取那些匹配的值。使用简单的属性实现(简单地引用底层关系属性,实际上是重命名它),您将被迫首先获取所有实体,然后在您的应用程序中进行过滤。
是的,您可以,但是您必须应用与 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();
}