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 一样“容易”生成。
澄清我需要它的用途:
我有许多带有 DateCreated
和 DateModified
字段的表,以及一些带有默认值的 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 默认值的主要内容,如果未能解决你的问题,请参考以下文章