插入Linq省略一些“假”列

时间:2011-10-06 14:40:14

标签: sql-server-2008 linq-to-sql

我在数据库中有一个表,其中包含以下列:ID, Name, Txt。我们正在使用Linq To Sql来实现我们的DAL。在那里,另一个同事添加了两个额外的列,因此在代码中,相同的表结果为:ID, Name, Txt, NameTemp, TxtTemp

这两个“假”表在LINQ连接的代码的不同部分中使用,并使用SQL Profiler进行分析,解析的SQL查询采用“真实”列,一切正常。 现在我需要使用该表进行INSERT,但是我得到了一个异常,因为在语句中也使用了伪列。

由于我无法在数据库中添加两个假列(因为那里没有用),有没有办法让Linq省略这两列?

2 个答案:

答案 0 :(得分:1)

我想我知道你在哪里。您应该能够向部分linq类添加属性没有问题,唯一的问题是,如果您尝试对这些“假”列使用linq查询,当linqtosql尝试引用不具有的列时,您将获得异常t存在于数据库中。我以前经历过这个 - 我希望能够选择数据库中不存在的列(但在linq2sql dbml类中执行),并让linq2sql将列转换为它们在数据库中的实际内容。唯一的问题是没有真正简单的方法可以做到这一点 - 你可以为“假”属性添加属性,以便linq2sql认为NameTmp和TxtTmp实际上是sql世界中的Name和Txt,唯一的问题是当它涉及到插入一条记录,翻译的sql指定两次相同的列(SQL不喜欢并抛出异常)。

您可以使用IsDbGenerated = true标记列 - 这将允许您插入记录而不会出现双列问题,但如果没有linqtosql抱怨您无法更新计算列,则无法更新记录。我想你可以使用一个sproc来解决这个问题吗?

我在一段时间后记录了微软的一个错误,他们永远无法修复。这里的信息可以帮助您获得所需的信息 -

http://social.msdn.microsoft.com/Forums/eu/linqtosql/thread/5691e0ad-ad67-47ea-ae2c-9432e4e4bd46

https://connect.microsoft.com/VisualStudio/feedback/details/526402/linq2sql-doesnt-like-it-when-you-wrap-column-properties-with-properties-in-an-interface

答案 1 :(得分:-1)

LINQ不是用于插入数据,而是用于查询 - 语言已整合查询。使用ADO.NET插入数据。

(离开第一部分提醒我的愚蠢) 检查ScottGu。生成的类是部分的(提到here),因此您可以将2个属性放入可编辑的部分,因为它们没有定义任何映射属性,所以它们不会被映射也不会被持久化。