【问题标题】:Default valued DateTime column, mapping with EF4默认值 DateTime 列,与 EF4 映射
【发布时间】:2009-12-15 09:55:30
【问题描述】:

在我的数据库中有一个日期时间列“已创建”,默认值为 getutcdate()。我希望我的 EF 数据上下文生成一个不设置此列的插入查询,并获取结果值。有没有办法做到这一点?

我尝试将 StoreGeneratedPattern 设置为 None、Identity 或 Computed,我得到一个异常,即 DateTime 无法转换为 datetime2(这意味着它试图在 0-0-0 插入 0:00)

如何设置我的 edmx 以允许在不指定初始 Created 值的情况下创建对象?

【问题讨论】:

  • 您找到解决方案了吗?
  • @uhleeka 不幸的是我没有。我已经构建了通用代码来检查修改和/或添加的对象是否实现了接口,以及它们是否确实设置了创建和/或修改。我可以添加它作为这个问题的答案,但这更像是一种解决方法。我想知道为什么给定的答案对我不起作用。
  • 经过更多挖掘,事实证明,通过(不恰当的)设计,设置 StoreGeneratedPattern 会修改 CDSL,但不会修改 SSDL。因此,您必须手动编辑 edmx xml 并将 SSDL StoreGeneratedPattern 属性设置为标识或计算。但是,每当您通过设计器更新您的 edmx 时,我认为您的更改会被吹走。 connect.microsoft.com/VisualStudio/feedback/details/505178/…
  • 知道这个问题是否会很快得到解决?

标签: entity-framework linq-to-entities .net-4.0


【解决方案1】:

在我的机器上工作。刚试了一下,在我的模型中添加了一个名为“Property”(默认名称)的属性,将列设置为 Nullable: false, StoreGeneratedPattern: computed:

这是我刚刚尝试的示例生成的 sql:

insert [dbo].[Foods]
      ([CommonName],
       [ScientificName],
       [ShortDescription],
       [CategoryId],
       [LongDescription])
values('sdfg' /* @0 */,
       'sdfg' /* @1 */,
       'sdfg' /* @2 */,
       1 /* @3 */,
       'sdfg' /* @4 */)
select [Id],
       [Property]
from   [dbo].[Foods]
where  @@ROWCOUNT > 0
       and [Id] = scope_identity()

EF4 甚至知道如何在插入后读回 Property 属性。

编辑:你有这个问题吗: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value

我知道你的声音听起来不对。您应该得到一个不同的错误,因为日期时间字符串低于 sql 日期格式允许的最小值。看起来您的映射只是映射到错误的架构。

【讨论】:

  • 我确实有您的编辑中描述的问题:确实。我会再试一次 Nullable: false, StoreGeneratedPattern: computed。
  • @jfar,您是使用 EF1 还是使用 VS2010/.NET4 附带的 EF 进行了测试?我将属性设置为“Nullable: false, StoreGeneratedPattern: computed”,并在数据库中设置为 NOT NULL 和默认值/绑定 getutcdate()
猜你喜欢
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多