【问题标题】:Linq to SQL: Load default field Values ONLY for fields with NULL valueLinq to SQL:仅为具有 NULL 值的字段加载默认字段值
【发布时间】:2013-11-15 23:35:35
【问题描述】:

我正在将 Linq-to-SQL 用于包含名为 Category 的记录的表,并且 Record 有一个名为 Level 的列em> 其默认值通过数据库声明定义为 -1。

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

  1. 如果变量 R 的字段 Level 为空:使用默认 DB 值 插入
  2. 如果定义了变量 R 的 级别(非空):使用值 此字段用于插入

我已经为字段 Level 使用了 Auto Generated 属性,但它会导致在所有情况下都使用默认值插入。

【问题讨论】:

  • 你试过在模型构造函数中添加默认值吗?
  • 为什么不在保存前简单地检查一下,即if(obj.Level==null || obj.Level==0){obj.Level=1;}
  • @ManishMishra - 因为这违背了数据库默认值的目的
  • 听起来像是一个简单的 if/else 情况。是什么部分让你难以接受?
  • @oerkelens 你的意思是?他已经在数据库中设置了默认值,他想通过代码来完成

标签: c# sql linq-to-sql


【解决方案1】:

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();

并在丹的方法中使用它。

但如果可能的话,不要理会这些,只需接受 NULL 是未定义级别的良好默认值,更改架构以允许 NULL 用于“Level”并刷新您的 DBML ,那么您就不必再担心了。

【讨论】:

    【解决方案2】:

    这种结构应该可以工作。

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

    【讨论】:

    • 我正在使用以下上下文:dbContext.Categories.InsertOnSubmit(newCategoryToInsert); dbContext.SubmitChanges(); 但是我不知道如何将此模板应用于这段代码
    猜你喜欢
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多