【问题标题】:Insert into many-to-many relationship tables插入多对多关系表
【发布时间】:2011-12-23 05:33:07
【问题描述】:

简单场景

[ClientTable]: ClientId, ClientName, Phone, Age
[CityTable]: CityID, CityName, Country
[ClientCityTable]: ClientCityID, ClientID, CityID

Client client = new Client("John", 123456789, 40);
City city = new City("NY", USA);
ClientCity clientCity = new ClientCity(client, city);

我应该在每个对象(表)上还是只在 clientCity 上进行 InsertOnSubmit? 还是没关系?区别在哪里?

编辑

我在问我是否应该做

DatabaseDC dc = new DatabaseDC(connectionString);
dc.Client.InsertOnSubmit(client);
dc.City.InsertOnSubmit(city);
dc.ClientCity.InsertOnSubmit(clientCity);
dc.SubmitChanges();

或只有

DatabaseDC dc = new DatabaseDC(connectionString);
dc.ClientCity.InsertOnSubmit(clientCity);//because this object has references to client and city
dc.SubmitChanges();

?

编辑 2

我做了一些尝试,甚至我只在client 上使用InsertOnSubmit,条目也插入到CityClientCity。我应该怎么做才正确?

【问题讨论】:

    标签: c# sql linq-to-sql many-to-many insertonsubmit


    【解决方案1】:

    通常,您必须确保链接表在插入之前存在,否则您可能会收到错误(取决于您是否限制了 sql 表)。

    您还可以为插入和更新创建自定义存储过程调用,这些过程可以确保链接表是正确的。

    恕我直言,linq-to-sql 适合进行复杂的选择,但不太容易用于更新数据库。 (我经常看到它造成了严重的性能瓶颈。)

    【讨论】:

    • 所以,如果我理解正确的话:我可以在每张桌子上进行 InsertOnSubmit,但这不是必需的吗?那么这将是检查表Client和City的方式吗?并且仅在 ClientCity 上使用 InsertOnSubmit 的方法也可以正常工作?
    • 我想知道对上述三个对象中的每一个对象的调用 InsertOnSubmit 是否不会导致双重输入 Client 和 City?
    • 我不太确定你在问什么。 linq-to-sql 不会“级联”。您必须通过“手”来完成。如果您多次插入相同的东西,您将获得多次。
    • 我尝试了这两个选项,在我的 mdf 数据库中没有区别。没事吧?
    • linq-to-sql 适用于更新,只要您不尝试批量执行任何操作
    【解决方案2】:

    从结果来看,真的没关系。两种方式都是正确的。

    第二种的优点(只有一个insertonsubmit)

    • 清洁剂
    • 更少的代码

    第一个的优点

    • 对于刚接触 Linq2sql 的人来说更容易阅读/理解
    • 此外,如果没有正确的引用,将进行插入(或者这是一个缺点?由您决定)

    正如你已经发现的那样,结果是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多