当前位置:  开发笔记 > 编程语言 > 正文

如何确保Linq to Sql不会覆盖或违反不可空的数据库默认值?

如何解决《如何确保LinqtoSql不会覆盖或违反不可空的数据库默认值?》经验,为你挑选了1个好方法。

我有一个带有这些字段的表的SQL Server数据库:

    A bit的默认值为1 , NOT NULL.

    A smalldatetime具有默认值gettime(),NOT NULL.

    一个int没有默认值,IDENTITY,NOT NULL.

当我为此表生成Linq to SQL时,会发生以下情况:

    bit没有给出特殊处理.

    smalldatetime没有给出特殊处理.

    int被标记为IsDbGenerated.

这意味着当我使用Linq to SQL进行插入时,将发生以下情况:

    bit将被发送为0,覆盖默认值.对?

    smalldatetime将被作为一个未初始化的System.DateTime,生产在SQL服务器错误,因为它不与SQL Server的SMALLDATETIME范围不同.对?

    IsDbGenerated int不会被发送; DB将生成一个Linq to SQL将读回的值.

我必须做出哪些更改才能使此方案有效?

总结一下:我想要具有DB分配的默认值的非可空字段,但是IsDbGenerated如果它意味着在使用Linq to SQL进行更新或插入时我无法为它们提供值,则我不需要它们.IsDbGenerated如果这意味着我必须手动修改Linq生成的代码到SQL,我也不想要它们.

编辑:答案似乎是这是当前Linq to SQL的限制.



1> Robert Pauls..:

Linq-To-Sql生成的类不会获取默认值Constriants.

也许在未来,但问题是约束并不总是简单的值,它们也可以是标量函数GetDate(),所以linq会以某种方式知道如何翻译它们.简而言之,它甚至都没有尝试过.它也是一种非常特定于数据库的东西.

您可以编写代码生成器来创建实体分部类,您可以在其中提取默认值constriant.

或者,您的业务层代码可以从xml文件中设置构造函数中的默认值,您需要做的就是使xml文件保持最新.

您可以通过在提交对数据库的更改之前检查ChangeSet来模拟sql并添加默认值,而不是在构造函数中执行工作.

您在CodeProject中详细描述了您遇到的问题- 为LINQ绑定数据设置默认值

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有