【问题标题】:LINQ to SQL : How to Insert record into a view?LINQ to SQL:如何将记录插入视图?
【发布时间】:2009-11-25 13:14:47
【问题描述】:

我正在使用 Linq to SQL 进行数据库操作,并尝试在 VIEW 中执行插入操作,它会引发错误,

XXt threw exception:  System.InvalidOperationException: Can't perform Create, 
Update or Delete operations on 'Table(XXX)' because it has no primary key.

如何使用 LINQ 在 C# 中将记录插入到 View 中?

谢谢。

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    您可以根据可更新视图here 插入/更新视图。只能插入/更新一个基础表,否则它将失败。要使用 LINQ 实现此功能,请执行以下操作;

    • 在您的 .DBML 文件中,将视图中的一个(或多个)列标记为主键
    • 确保视图中您希望插入/更新的任何映射都作为指向基表列的链接公开。例子;
      • 可插入/可更新的列不能包含;
        • SUM(BaseTable.ColumnName) as ColumnName
        • ISNULL(BaseTable.ColumName,0) as ColumnName
        • BaseTable.ColumnName1 + ' ' + BaseTable.ColumnName2 as ColumnName
      • 但可以包括;
        • BaseTable.ColumnName
        • BaseTable.ColumnName 作为 MyNewName
    • 在您的 .DBML 中将任何直接映射到基表的列标记为自动生成的值。

    试一试。我成功地使用这种技术将视图用作我用于读取/插入/更新记录的唯一对象。

    【讨论】:

      【解决方案2】:

      实际上你可以插入到一个视图中。如果底层视图有一个表,那么你可以插入到它中。

      如果它有多个表..那么你可以使用而不是触发器;

      我还向视图中插入了一条记录..in linq to sql。 (我自己刚刚开始学习 linq)。

      我必须在视图上创建一个主键。使用设计器,然后将该字段的自动同步设置为从不。这应该可以解决问题..

      【讨论】:

      【解决方案3】:

      我们可以在 LINQ to SQL 进程中使用 VIEW 进行插入、更新和删除操作。我们需要确保的是:视图应该有主键。

      我们可以为视图中的字段设置主键。

      打开 .dbml 文件设计器并选择要作为主键的字段,然后按 F4(打开属性窗口)。

      为所选字段的主键属性选择 true。

      现在执行你的程序。它应该工作。

      【讨论】:

        【解决方案4】:

        您不能插入到视图中。您只能插入到表格中。

        您可以这样做 - 见下文。

        【讨论】:

        • 确实这个答案是错误的。如果您在构成视图的表上使用触发器并指定如何处理这一切,则可以插入到视图中。
        【解决方案5】:

        dbml 中的此字段的自动同步必须为 'OnInsert'

        【讨论】:

          【解决方案6】:

          我假设您的意思是尝试将行插入表中,而不是尝试将行插入视图。您不会将行插入到视图中。

          话虽如此,L2S 要求您的表具有主键,如错误消息所示。创建主键并相应地更新 .DBML 后,您应该没问题。

          兰迪

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-04
            • 2011-02-15
            • 2012-03-01
            • 2010-11-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多