Entity framework 如何使用实体框架管理GetDate()
在我的一个数据库表中有这样一列Entity framework 如何使用实体框架管理GetDate(),entity-framework,sql-server-2008,Entity Framework,Sql Server 2008,在我的一个数据库表中有这样一列 DateCreated, datetime, default(GetDate()), not null 我正在尝试使用实体框架在这个表上进行插入,如下所示 PlaygroundEntities context = new PlaygroundEntities(); Person p = new Person { Status = PersonStatus.Alive,
DateCreated, datetime, default(GetDate()), not null
我正在尝试使用实体框架在这个表上进行插入,如下所示
PlaygroundEntities context = new PlaygroundEntities();
Person p = new Person
{
Status = PersonStatus.Alive,
BirthDate = new DateTime(1982,3,18),
Name = "Joe Smith"
};
context.AddToPeople(p);
context.SaveChanges();
当我运行这段代码时,我得到以下错误
The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated.
所以我尝试将StoreGeneratedPattern设置为computed。。。同样的事情,然后身份。。。同样的事情。有什么想法吗?将DateCreated的类型更改为datetime2可能会解决问题 日期时间2007-05-08 12:35:29.123 日期时间2007-05-0812:35:29。12345
Ref:您必须手动编辑edmx xml,并将SSDL StoreGeneratedPattern属性设置为identity或computed。但是,无论何时通过设计器更新edmx,您的更改都将被覆盖 这是一个众所周知的问题。有关详细信息,请参阅以下链接:
这里有一个解决方法: 1) 如其他地方所述,将列更改为datetime2。这修复了转换错误 2) 添加将DateCreated设置为getdate()的触发器 3) 如有必要,设置
p.DateCreated = DateTime.MinValue;
只是为了初始化它
4) 如果需要从数据库创建的日期,请添加
context.Refresh(System.Data.Objects.RefreshMode.StoreWins, p);
刚过
context.SaveChanges();
我也有同样的问题!对我来说,它是这样工作的: 数据库MS SQL Server express:
[RowTime] [datetime2](7) NOT NULL
ALTER TABLE [dbo].[Table_1] ADD CONSTRAINT [DF_Table_1_RowTime] DEFAULT (getdate()) FOR [RowTime]
GO
然后将表从数据库导入实体模型。
实体将无法实现默认值!
因此,必须将列的StoreGeneratedPattern设置为Computed。
然后实体将不再在那里放置任何默认值
结合:
datetime2,
NOT NULL,
StoreGeneratedPattern=Computed
为我工作 关注我不想更改数据库这一事实,因为这是一个应用程序问题,我希望有一天他们能解决这个问题,我的解决方案(在我的情况下完全可能)是创建模型的部分类来纠正构造函数上的问题:
public partial class Log
{
public Log()
{
this.Date = DateTime.Now;
}
}
这对我很有用,因为:
- 我在将模型发送到数据库时就创建了模型
- 我使用云来提供这些服务,应用程序和数据库服务器的日期时间必须相同李>
不要忘记名称空间需要与模型名称空间匹配,否则partial不应该列出属性(也不应该是partial;])解决了异常,但默认值(GetDate())在insert上没有被调用。实际上,它看起来确实有效,但是.net代码默认设置为datetime.minvalue。有没有办法阻止它这样做?我有一个确切的问题,你能写一个正确的答案吗?请wcpro?@wcpro你到底是如何配置storegeneratedpattern来解决这个问题的?在edmx文件中,右键单击字段->属性->将storegeneratedpattern从无更改为计算,然后保存。。。适用于我。Visual Studio 2010允许您现在设置此设置,而无需编辑edmx文件。@ICodeForCoffee正如KenB提到的,当前存在一个错误,并且Visual Studio UI中的此设置未正确应用于.edmx文件。真烦人:[
public partial class Log
{
public Log()
{
this.Date = DateTime.Now;
}
}