LINQ to SQL:如何将记录插入视图?

我正在使用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?

谢谢。

您无法插入VIEW。 您只能插入表格。

你可以这样做 – 见下文。

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

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

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

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

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

我还在一个视图中插入了一条记录..在linq到sql。 (我刚刚开始学习linq)。

我不得不在视图上创建主键。 使用设计器,然后将该字段的自动同步设置为永不。 这应该够了吧..

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

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

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

为所选字段的Primary Key属性选择true。

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

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

我假设你的意思是,不是试图在View中插入一行,而是试图在表中插入一行。 您不要在视图中插入行。

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

兰迪