我在数据库中有一个表,其中包含以下列:ID, Name, Txt
。我们正在使用Linq To Sql来实现我们的DAL。在那里,另一个同事添加了两个额外的列,因此在代码中,相同的表结果为:ID, Name, Txt, NameTemp, TxtTemp
。
这两个“假”表在LINQ连接的代码的不同部分中使用,并使用SQL Profiler进行分析,解析的SQL查询采用“真实”列,一切正常。 现在我需要使用该表进行INSERT,但是我得到了一个异常,因为在语句中也使用了伪列。
由于我无法在数据库中添加两个假列(因为那里没有用),有没有办法让Linq省略这两列?
答案 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
答案 1 :(得分:-1)