【问题标题】:linq Can't perform Create, Update, or Delete operations on 'Table(req)' because it has no primary keylinq 无法对“表(req)”执行创建、更新或删除操作,因为它没有主键
【发布时间】:2016-02-26 11:18:22
【问题描述】:

当表没有主键时如何在表中添加行。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    正如您的问题标题所述,LINQ to SQL 无法对没有主键的表执行创建、更新或删除操作。这是不可能的。

    因此,您可能需要使用 DataContext.ExecuteCommand() 来执行这些操作,或者更好的是重构您的数据库,以便表具有主键。

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题。但是我解决了这个问题......

      1.在服务器资源管理器中设置表的主键(可以在打开的表定义中右键查看)

      2.打开App_Code文件夹下的dataclasses.dbml

      3.删除已经存在的表

      4.再次设置primarykey后拖动同一张表。

      5.保存所有更改。(系统会提示将更改保存到.dbml文件-->点击yes)

      6.再次运行应用程序

      会有用的

      【讨论】:

        【解决方案3】:

        让我用一个例子来说明:

        SampleDataContextDataContext db = new SampleDataContextDataContext();
        Employee emp = new Employee() {
              FirstName = "Experts",
              Lastname = "Comment",
              Address = "rs.emenu@gmail.com"
        };
        
        db.Employees.InsertOnSubmit(emp);
        db.SubmitChanges(); 
        

        上面的代码在尝试插入新行时给出了同样的错误。此问题背后的原因是 LINQ 不提供将数据插入到没有主键的表中的功能。此时您有两个选项可用于执行插入操作。

        1.创建一个存储过程并从LINQ调用它。

        SampleDataContextDataContext db = new SampleDataContextDataContext();
        db.InsertEmployeeData("Experts","Comment", "rs.emenu@gmail.com");
        

        这里我创建了一个名为InsertEmployeeData 的存储过程,并从代码中调用它。简单直接。

        2.创建插入语句并使用LINQ执行。

        SampleDataContextDataContext db = new SampleDataContextDataContext();
        
        string insertStatement = "Insert into Employee values('Experts', 'Comment','rs.emenu@gmail.com')";
        db.ExecuteQuery<Employee>(insertStatement);
        

        这里我创建了一个普通的插入查询并使用 LINQ ExecuteQuery 方法执行。

        【讨论】:

          【解决方案4】:

          如果无法在db中设置,请在linq2sql设计器中设置主键。

          如果没有可用作主键的列子集,则将它们全部标记为主键的一部分。

          【讨论】:

            【解决方案5】:

            【讨论】:

              【解决方案6】:

              这里我可能错了,因为我现在无法验证,但我相信你可以告诉 Linq to Sql 一个字段是主键,即使它实际上不是数据库中的一个。这假设该字段中的数据实际上是唯一的,即使它没有定义为一个,也可以用作键。

              如果表没有主键,但包含可以用作键的唯一数据,则在 dbml 中告诉 L2S 这是主键。

              如果表不包含可以用作键的唯一数据,那么你必须编写一个存储过程来删除你要删除的数据。

              【讨论】:

                【解决方案7】:

                有些表(如供应商提供的表)没有主键!

                每个答案都说“添加主键”。

                看,我不会问我是否可以添加一个。条件不是我预设的。

                有没有办法只写。无需阅读、删除或更新。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-12-01
                  • 1970-01-01
                  • 2011-07-09
                  • 1970-01-01
                  • 2012-01-19
                  相关资源
                  最近更新 更多