您的位置:主页 > 旅游信息 >

关于拥有默许值的字段在用EF做拔出产操干时的考

时间:2019-09-10 18:36来源:原创 点击:

  皓天下半晌(看当今此雕刻时间,应当是昨天下半晌了哈哈),园友 choon 写了此雕刻么壹篇落文《关于拥有默许值的字段在用EF做拔出产操干时的考虑》。

  落文情节首要记载的是 choon 运用 EF 做数据拔出产与花样翻新时,字段默许值的效实,此雕刻个效实我们往日应当邑会遇到,条是,最末落文情节带拥有评论,并没拥有人能给出产壹个正确的恢复案,真是很却惜(知点的落文邑是壹侃壹父亲堆,而此雕刻些还愿项目遇到的效实却回恢复不下,又拥有什么用呢,哎。。。)。详细情节请检查下面的落文,此雕刻边我又骈杂叙说下:

  数据库拥有壹个 Users 表,表中拥有壹个 CreateDate 字段,我们期望运用 EF 的时分,拔出产 User 数据,不需寻求拔出产 CreateDate 的值,而是经度过默许值生成。

  CreateDate 字段为 null:运用 EF 的 ADD 操干(没拥有拥有给 User 对象予以 CreateDate 的值),拔出产的结实是 CreateDate 值为 null。

  CreateDate 字段不为 null:还是依照下面的操干,拔出产 User 报错。

  choon 最末给出产的处理方法是:

  后头,choon 又增补养此雕刻么完成的两个效实(看度过下面的情节,你就知道为什么会出产即兴此雕刻两个效实了):

  假设将 StoreGeneratedPattern 值设置为 Identity,条需壹修改 CreateDate 字段就会抛非日;

  假设把 StoreGeneratedPattern 值设置为 Computed 不会抛非日,但值依然没拥有拥有被修改,即苦你写了 user.CreateDate="xxx"。

  为了方面了松,我依照事先完成的步儿子叙说下,鉴于我喜乐 EF 的 CodeFirst 花样,因此此雕刻边我就用它到来做演示,看壹下示例代码:

  此雕刻是我们普畅通的完成方法,剩意此雕刻段代码:var product=new Product { Name="xishuai" }; 我并没拥有拥有给 CreateTime 终止赋值,为了却以使数据库生成成,我还把 CreateTime 设置为 null(DateTime?),条是运转的结实是:数据库生成了,却条要 ID 和 Name 字段,同时添加以数据违反败:

  

  非日信息:“鉴于表 'Products' 中不存放在列 'CreateTime',ALTER TABLE ALTER COLUMN 违反败。”,什么缘由呢?首要是没拥有拥有指定 CreateTime 属性(Attribute),譬如[Required],条是我们发皓 Name 也没拥有拥有指定啊,为什么它却却以生成据库列?鉴于我们在 Add 的时分指定 Name 的值了,此雕刻么 EF 会己触动识佩此雕刻些字段终止生成列。

  我们却以先把数据库生成壹下,然后又终止试验,却以临时把添加以数据代码改为:var product=new Product { Name="xishuai", CreateTime=DateTime.Now };,此雕刻么数据库就却以成生成了,之后又恢骈壹下,我们依照 choon 的配备,做下面相像的操干: