相关疑难解决方法(0)

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

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

  1. A bit的默认值为1 , NOT NULL.
  2. A smalldatetime具有默认值gettime(),NOT NULL.
  3. 一个int没有默认值,IDENTITY,NOT NULL.

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

  1. bit没有给出特殊处理.
  2. smalldatetime没有给出特殊处理.
  3. int被标记为IsDbGenerated.

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

  1. bit将被发送为0,覆盖默认值.对?
  2. smalldatetime将被作为一个未初始化的System.DateTime,生产在SQL服务器错误,因为它不与SQL Server的SMALLDATETIME范围不同.对?
  3. IsDbGenerated int不会被发送; DB将生成一个Linq to SQL将读回的值.

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

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

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

c# sql linq sql-server-2005 linq-to-sql

14
推荐指数
1
解决办法
2828
查看次数

LINQ to SQL默认值

我们都知道Linq to SQL(和SQLmetal/exe)实际上是一个"原型"质量的产品(它缺少模式"刷新"和使用默认值检测空列的基本功能).

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

要求:它需要像linq-to-sql或sqlmetal一样"简单"生成.


澄清我需要它:

我有很多表DateCreatedDateModified字段以及一些默认值的bitenum-like(int)列; 所有这些应该是和not null.

我需要在更改数据库后重新生成("刷新").dbml ...所以(重新)将自动生成(或自动同步)属性设置True为不是我真正关心的几乎每个我更新架构的时间.

以下代码(基于使用LINQ to SQL处理缺省值):

namespace Project.Data
{
    public partial class ProjectDataContext
    {
        partial void OnCreated()
        {
            if (this.DateCreated == null)
            {
                this.DateCreated = DateTime.UtcNow;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不编译(错误... does not contain a definition for 'DateCreated' ...).我真的认为它没有理由应该编译......但我还是试了一下.也许我只是不理解他的例子中的代码的上下文.

.net c# linq sql-server linq-to-sql

6
推荐指数
1
解决办法
3273
查看次数

标签 统计

c# ×2

linq ×2

linq-to-sql ×2

.net ×1

sql ×1

sql-server ×1

sql-server-2005 ×1