gpt4 book ai didi

asp.net-mvc - Linq to SQL 实体拆分

转载 作者:行者123 更新时间:2023-12-04 22:00:30 25 4
gpt4 key购买 nike

我最近开始使用 ASP.NET MVC NerdDinner 示例,作为其中的一部分,您可以使用 Linq to SQL 类。这看起来很酷,所以我决定脱离(可能有点过早!)并尝试创建自己的 MVC 应用程序,但这次使用 Linq to SQL 对我自己的简单数据库进行建模。

我遇到的问题是这个。考虑这些表:

  • 汽车
  • 乘客

  • CarPassengers 表是 Car 和 Person 之间的映射表(它有两列:CarId、PersonId)。

    在 Linq to SQL 中,我为每个表获取了一个类。但是,我真正想要的是一个具有 CarPassengers 属性的 Car 类,每个 child 都是一个 Person,而不是实际的 FK(可以选择结果,但是要使用新的 Person 对象更新 Car,我必须首先构造他们——我认为,我不能只添加 CarPassengers 的 EntitySet 而不首先实例化子 Person 对象)。

    我一直在环顾四周,发现 ADO.NET Entity Framework 将允许我使用实体拆分来实现这一点,但我想知道是否有一种简单的方法可以在 Linq to SQL 中完成同样的事情,如果没有,将 .NET EF 与我的 MVC 应用程序集成会产生什么影响。

    任何建议、评论、提示将不胜感激。

    谢谢!

    最佳答案

    如果您在将 FK 添加到设计器表面之前定义它们,您将以接近您期望的方式将 EntitySet 添加到类中。 CarPassengers 将存在,但它将是 CarPassenger 对象的 EntitySet,而不是 Persons。然而,那些对象,有一个关联的 Person EntityRef。这将允许您找到车内的乘客。

     var car = db.Car.Where( c => c.CarId == id );
    var passengers = db.Car.CarPassengers.Select( cp => cp.Person );

    添加新乘客也有效,但还涉及另一个步骤。
     var car = db.Car.Where( c => c.CarId == id );
    var person = new Person { ... };
    car.CarPassengers.Add( new CarPassenger { Person = person } );

    如果您没有提前定义 FK 关系,您始终可以在设计器中手动添加关联。 MSDN 有一个 HowTo article关于这个话题。

    关于asp.net-mvc - Linq to SQL 实体拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1171242/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com