【问题标题】:LinqToSql calling default methodLinqToSql 调用默认方法
【发布时间】:2016-07-15 09:46:57
【问题描述】:

我有一个数据库,其中包含一个名为 Articles 的表。

该表存储文章并具有一个字段 CDTimeStamp。 CDTimestamp 字段被更改为这样,因此它始终具有正确的创建日期:

ALTER TABLE [dbo].[Artikel] ADD  CONSTRAINT [DF_Artikel_CDTimeStamp]  DEFAULT (getdate()) FOR [CDTimeStamp]
GO

因此,如果我尝试添加文章,则会收到错误消息。 文章是这样添加的:

public void AddArticle()
{
    this.Open();

    Article article = new Article();
    article.Description = "";
    article.ArticleNr = GetArticleNumber();
    article.Barcode = GetBarcode(); //EAN
    article.Branch = GetBranch(); // 3digit number
    article.Company = GetCompany(); // 1 or 2
    article.Preis = GetPrice();
    article.PreisNew = GetNewPrice();
    //article.CDTimeStamp = DateTime.Now;

    _OutDataContext.Artikel.InsertOnSubmit(article);
    try
    {
        this.Submit();
    }
    catch (Exception e)
    {
        throw;
    }
    this.Close();
}

我得到的错误是:

SqlDateTime 溢出。必须在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59。

如果我取消注释//article.CDTimeStamp = DateTime.Now;,则会创建并插入一个 DateTime,但应该插入 getdate() 默认值,而不是我在程序中创建的值。 我的问题是: 是否有配置条目或类似的东西可以调用默认函数?数据库字段不能为空。

附言 我不太确定如何称呼这个问题,所以如果您知道更正确的标题,请随时编辑它。

【问题讨论】:

    标签: sql-server linq-to-sql


    【解决方案1】:

    我认为ColumnAttribute.IsDbGenerated 是您正在寻找的。 在类映射中使用类似:

    class Article 
    {
        [Column(..., IsDbGenerated = true)]
        public DateTime CDTimeStamp { get; set; }
    ...
    

    【讨论】:

    • 非常简单的答案谢谢。仅供参考在 dbml 资源管理器中,我可以设置一个名为“自动生成值”的属性,然后生成 IsDbGenerated 属性。
    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 2016-04-04
    • 2011-10-01
    • 2019-03-03
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多