我尝试了这两种属性:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime CreatedDate { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime LastUpdated { get; set; }
流畅的API:
modelBuilder.Entity<Customer>().Property(b => b.CreatedDate).HasDefaultValue().ValueGeneratedOnAdd();
modelBuilder.Entity<Customer>().Property(b => b.LastUpdated).HasDefaultValue().ValueGeneratedOnAddOrUpdate();
modelBuilder.Entity<Customer>().Property(b => b.Id).HasDefaultValue().ValueGeneratedOnAdd();
在迁移和更新之后,数据库中不会发生任何事情——我希望这里有一个触发器或约束。
阅读通过
the documentation
它说:
数据库提供程序可能会自动为某些属性类型设置值生成,但其他提供程序可能要求您手动设置值的生成方式。例如,使用SQL Server时,将自动为guid属性生成值(使用SQL Server顺序guid算法)。但是,如果指定在add上生成datetime属性,则必须为要生成的值设置一种方法。一种方法是配置getDate()的默认值,请参见默认值。
好吧,但是我怎样才能,首先使用代码,在数据库上建立适当的逻辑呢?我不想在我的模型中创建默认值,因为那样的话,我将依赖于我的API。我以为数据库生成选项可以做些什么……现在,它似乎相当无用。
我看到一些帖子在up()方法中创建了一个触发器,但我并不认为迁移文件夹是放置配置代码的好地方。