在我的Users
表中,我有一个名为CreatedOn
的列,其“默认值或绑定”设置为(getdate())
。在此模型的.edmx文件中,我将此列定义为<Property Name="CreatedOn" Type="datetime2" Precision="7" Nullable="false" StoreGeneratedPattern="Computed"/>
。
但是,我可以将.edmx文件中的字段定义更改为StoreGeneratedPattern="None"
,这样就可以了:
问题是实体框架,当我在.edmx文件中为此列指定StoredGeneratedPattern="None"
时,而不是让数据库自己设置GETTIME(),而是发送一个值0001-01-01 00:00:00
,然后覆盖数据库默认值。我知道这是通过记录实体发送的SQL语句:INSERT [dbo].[Users]([LoginName], [Password], ..., [CreatedOn]) VALUES (@0, @1, ..., @7) where @7 = '0001-01-01 00:00:00' (Type = DateTime2)
。
我必须这样做才能得到这个:
答案 0 :(得分:0)
您可以使用第二种方法,在保存应用代码之前将CreatedOn
设置为DateTime.Now
,从而减轻劣势。因此,CreatedOn
道具完全由应用中的应用代码管理,但如果直接在数据库中创建User
,默认约束将会启动。
以下是根据具体情况设置CreatedOn
的几种方法:
CreatedOn
属性的抽象基类或接口,并在你想要的任何类中继承/实现将该道具添加到。然后创建一个基本存储库保存方法,检查正在保存的对象是否具有CreatedOn
属性的类型,如果是,则在保存之前进行设置。