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

Linq to sql 通过分部类重命名LINQ 2 SQL实体属性,linq-to-sql,naming,rename,Linq To Sql,Naming,Rename,我可以使用分部类创建指向L2S设计器生成的关联属性的属性吗。另外,我是否能够在查询中使用新属性 如何实现这一点?如果您只是想为关联属性指定一个不同的名称,只需使用关联的属性页并重命名父属性和/或子属性即可。这将更改类中EntityRef/EntitySet的名称 编辑:在分部类中使用单独属性的缺点是,LINQ在生成查询时将无法使用它-本质上,在使用对象上的相关属性之前,您将被迫始终获取实体。通过重命名,您可以允许LINQ在构造查询时使用相关属性,从而生成更高效的查询。例如,如果要获取相关实体具有

我可以使用分部类创建指向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;
        }
    }

这不是一个实际的方法。当我重新生成模型时,更改被覆盖:+1这是一种实用的方法。Linq2sql没有“重新生成模型”按钮,在设计器中进行更改是使用它的一部分。这将为您的问题添加更多信息的答案。通过重新生成,您的意思是删除该表并将其重新添加吗?是的,这是一个问题,但肯定不会经常发生。或者您正在使用外部映射文件?我没有这方面的经验。您可以引用加载的属性,但是如果您尝试在间接引用中选择某个属性的值,它将无法将其直接转换为SQL。请尝试添加一个where子句,其中d.MyTestData.ID==1或类似的内容。如果在查询中使用父/子关系,则不会以相同的方式工作,因为表达式转换不支持间接属性。我刚刚运行了两个示例查询:@Freddy-您可以引用加载的属性,但我认为它对选择不起作用。如果没有属性修饰,我认为它没有生成表达式所需的提示。@Freddy-请参阅我对答案的更正-我的意思是在where子句中。@eglasius-您的方法给了我一个错误,有人试图附加或添加一个非新的实体,可能是从另一个DataContext加载的。这是不受支持的。当我尝试在datacontext上InsertOnSubmit时。我想提交时需要删除该属性。
        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();
        }