[entity framework core] Entity Framework Core Property Configuration
https://www.learnentityframeworkcore.com/configuration/fluent-api/property-configuration
配置entity的属性是非常之常用的, 我们可以为属性进行长度等各方面的限制, 都可以使用 fluent api完成, 下面表格列出的是一些 api:
method | des |
---|---|
HasAnnotation | Provides a means to apply annotations via the Fluent API |
HasColumnName | Specifies the name of the database column that the property should map to |
HasColumnType | Specifies the data type of the database column that the property should map to |
HasDefaultValue | Configures the default value of the database column that the property maps to |
HasDefaultValueSql | Configures the default value expression for the database column that the property maps to |
HasMaxLength | Specifies maximum length of data that can be stored for strings or binary data (arrays) |
IsConcurrencyToken | Denotes that the property takes part in concurrency management |
IsRequired | Configures the database column as not nullable |
ValueGeneratedNever | Specifies that the database should not automatically generate values for the property |
ValueGeneratedOnAdd | Specifies that values should only be generated automatically when new data is added |
ValueGeneratedOnAddOrUpdate | Specifies that values should be generated automatically when data is added or updated |
- example
public class SampleContext : DbContext
{
public DbSet<Book> Books { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Book>()
.Property(b => b.Title).HasColumnName("Description");
modelBuilder.Entity<Book>()
.Property(b => b.Title).HasColumnType("varchar");
modelBuilder.Entity<Book>()
.Property(b => b.Title).HasMaxLength(150);
modelBuilder.Entity<Book>()
.Propery(p => p.IsActive).HasDefaultValue(true);
modelBuilder.Entity<Book>()
.Propery(p => p.DateCreated).HasDefaultValueSql("GetUtcDate()");
modelBuilder.Entity<Book>()
.Property(p => p.BookId).ValueGeneratedNever();
}
}
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public Author Author { get; set; }
public bool IsActive { get; set; }
public DateTime DateCreated { get; set; }
}