我尝试了两个属性:
def mapper(self,_,line):
for li in self.db:
fields=li.split(',')
yield(fields[0],fields[1])
和Fluent API:
[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; }
迁移和更新后,数据库中什么都没有发生-我希望这里有一个触发器或约束。
通读the documentation时说:
数据库提供程序可能会自动设置某些属性类型的值生成,但是其他提供商可能需要您手动设置值的生成方式。例如,当使用SQL Server时,将自动为GUID属性生成值(使用SQL Server顺序GUID算法)。但是,如果指定在添加时生成DateTime属性,则必须设置一种生成值的方式。一种方法是配置GETDATE()的默认值,请参见默认值。
好的,但是我该如何使用代码优先的方法对数据库进行适当的逻辑处理。我不想在模型中创建默认值,因为那样我将依赖于通过API。我以为DatabaseGeneratedOption会做某事..现在看来相当没用。
我看到一些帖子在Up()方法中创建了一个触发器,但是我并不认为迁移文件夹是放置配置代码的好地方。
答案 0 :(得分:1)
我希望在这里有一个触发器或约束。
这不是该配置的工作,它指示EF在保存实体时重新加载生成或更新的值。
要实现您想要的目标(如该部分中所述),请参见Default Values:
您可以使用Fluent API为属性指定默认值。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Property(b => b.Rating) .HasDefaultValue(3); } }
您还可以指定用于计算默认值的SQL片段。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Property(b => b.Created) .HasDefaultValueSql("getdate()"); } }