Linq to SQL:仅对具有NULL值的字段加载默认字段值

时间:2013-11-15 12:10:06

标签: c# sql linq-to-sql

我正在使用Linq-to-SQL获取一个名为 Category 的记录的表,而Record有一个名为 Level的列 ,其默认值通过数据库声明定义为-1。

我希望我的C#应用​​程序就像插入类别类别的新记录R一样:

  1. 如果变量R的字段级别为空:使用默认的DB值 插入
  2. 如果归档 Level 定义了变量R(NOT NULL):使用值 此字段用于插入
  3. 我在字段 级别 中使用了 自动生成 属性,但它会导致所有情况都使用默认值插入。

2 个答案:

答案 0 :(得分:2)

Linq2SQL根本不支持SQL默认值,因此没有任何“内置”方法可以执行此操作。 但是,您始终可以在SQL中查找列的默认值:

select DefaultValue=Column_default from from information_schema.columns where column_name='Level' and table_name='Category'

您可以在应用启动时执行该命令并存储该值(转换为正确的课程类型)供以后使用:

if (newCategoryToInsert.level==0) 
{
   newCategoryToInsert.level = levelDefaultValueThatIStoredEarlier;
}
dbContext.SubmitChanges();

并在Dan的方法中使用它。

但是如果可能的话,请不要理会任何这一点,只是接受NULL是未定义级别的良好默认值,更改架构以允许NULLLevel “并刷新你的DBML,然后你就不用再担心了。

答案 1 :(得分:1)

这种结构应该有用。

if (R.Level == null)
linq query that does not include R.Level.  Database will apply default value
else
linq query that includes R.Level