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,你应该没问题。
兰迪