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

发布于 2024-07-18 00:01:58 字数 83 浏览 3 评论 0原文

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

我怎样才能实现这个目标?

Can I use partial classes to create properties that points to an association property generated by the L2S designer. Also, will I be able to use the new property in queries?

How can I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月下凄凉 2024-07-25 00:01:58

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

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

If you just want to give a different name to the association property, just use the Property page for the association and rename the parent and/or child property. That will change the name of the EntityRef/EntitySet in the class.

EDIT: The downside of using a separate property in a partial class is that LINQ won't be able to use it when generating queries -- essentially you'll be forced to always get the entities before you can use the related properties on the object. By renaming you allow LINQ to use the related properties in constructing the query which can result in a more efficient query. For example, if you want to get entities where a related entity has a particular property value, using the attribute decorated entity will allow LINQ to generate the SQL to pull just those matching values from the database. With the naive property implementation (that simply references the underlying relation property, in effect renaming it), you will be forced to first get all entities, then do the filtering in your application.

极致的悲 2024-07-25 00:01:58

是的,您可以,但是您必须应用与 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();
        }

Yes you can, but you have to apply the same attributes as the linq2sql generated property i.e.

    [Association(Name="Test_TestData", Storage="_TestDatas", ThisKey="SomeId", OtherKey="OtherId")]
    public System.Data.Linq.EntitySet<TestData> MyTestDatas
    {
        get
        {
            return this.TestDatas;
        }
    }

TestDatas being the original relation.

Update: A sample query I ran:

        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();
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文