3

我有一个 SQL Server 表结构,其中某些列是引用不同查找表的外键。这些列的创建方式是查找值NOT NULLDEFAULT value = 1因为查找值ID = 1是我要分配的默认值,以防NULL在保存记录时传递。

但是,在尝试Add/Update/Delete记录此子表时出现以下错误。

An attempt was made to remove a relationship between a (*) and a (*). However, one of the relationship's foreign keys (X) cannot be set to null. 

我尝试了很多搜索,但我得到了手动将 LINQ 更改为 SQL 代码或 XML 以解决此问题的解决方案。我不能这样做,因为将来当表格发生更改时,我必须确保每次都应用手动更改。

此外,我无法将我的列更改为接受NULL,因为这会影响通过 LINQ To SQL 使用同一表的其他应用程序。

为此,我需要更易于管理的解决方案。

4

2 回答 2

1

我假设您正试图通过分配null给它来“重置”对其默认值的引用,并期望 L2S 采用数据库默认值。但是,对于 L2S,您只是在取消外键。它不知道数据库中的任何默认值。

因此,您必须通过自己将其设置为默认查找对象来更改引用。您可以通过向Reset()您的类添加一个方法来做到这一点,因此您不必将这些代码分散在各处。

于 2013-06-28T20:44:13.693 回答
1

我通过从 Code it self 为 Table 类属性分配默认值来解决这个问题。我的理解是这样的。LINQ to SQL 不考虑从数据库设置的默认值。此外,该列不为 NULL。因此,作为 INT 列,.NET 分配给这些属性的默认值为 0。现在,我的数据库中没有任何 ID = 0 的主条目。此外,由于数据库没有为该列获取 NULL 值,因此它根本不会尝试应用默认值。

所以我所做的是,在保存记录之前,如果我发现绑定到此属性的控件具有 NULL 值(未选择任何内容/控件不可见等),我从它自己的代码中分配默认值。这消除了依赖数据库来分配默认值的需要。

现在,一切正常。想分享这个,因为我无法从任何地方得到任何令人满意的答案。

于 2013-07-02T05:59:02.387 回答