LINQ to SQL 默认值

Posted

技术标签:

【中文标题】LINQ to SQL 默认值【英文标题】:LINQ to SQL default values 【发布时间】:2010-10-05 21:51:02 【问题描述】:

我们都知道 Linq to SQL(和 SQLmetal/exe)确实是一个“原型”质量产品(它缺少基本功能,如架构“刷新”和检测具有默认值的空列)。

有没有办法自动创建我的 .dbml(类似于 LINQ to SQL 或 SQLmetal)并让它检测具有默认值的 NOT NULL 列?

要求:它需要像 linq-to-sql 或 sqlmetal 一样“容易”生成。


澄清我需要它的用途:

我有许多带有 DateCreatedDateModified 字段的表,以及一些带有默认值的 bit 和类似枚举 (int) 的列;所有这些都应该是not null

在对数据库进行更改后,我将需要重新生成(“刷新”).dbml...所以(重新)将自动生成(或 Auto-Sync)属性设置为 True 并不是我真正想要的几乎每次我更新架构时都要小心。

以下代码(基于Handling Default Values With LINQ to SQL):

namespace Project.Data

    public partial class ProjectDataContext
    
        partial void OnCreated()
        
            if (this.DateCreated == null)
            
                this.DateCreated = DateTime.UtcNow;
            
        
    

无法编译(... does not contain a definition for 'DateCreated' ... 出错)。我真的看到没有理由它应该编译......但我还是试了一下。也许我只是不明白他的例子中代码的上下文。

【问题讨论】:

How do I ensure Linq to Sql doesn't override or violate non-nullable DB default values? 的可能副本 该帖子已有 2 年历史,并暗示有一天它可能会得到支持。我想看看今天是不是那一天。 :-) 有人知道这方面的进展吗? 这方面没有进展,也不会有,因为 linq2sql 不再开发。您显示的代码 is correct 不幸的是似乎是唯一可行的方法。它对你不起作用,因为你把OnCreated放在上下文类的定义中,你需要把它放在实体类中。 【参考方案1】:
this.DateCreated ?? DateTime.UtcNow

??表示如果左侧为空,则使用右侧

【讨论】:

确实如此。但没关系真的很重要。 是的。因为 linq 对象是 System.Nullable 的类型

以上是关于LINQ to SQL 默认值的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL查询的结果值有误

在 Linq to SQL 查询中设置非列属性值

针对 LINQ To SQL 查询中的位字段评估布尔值

Linq to sql where [column] in(值列表与其他架构)

Linq 中默认值的平均扩展方法

使用 LINQ 时的默认 xml 属性值