相关疑难解决方法(0)

EF CORE 2.1 HasConversion对datetime类型的所有属性

我以前使用DateTimeKindEntityMaterializerSource(Git)在读取实体时将所有DateTime转换为UTC,因为默认是未指定的.

使用EF核心2.1,DateTimeKindEntityMaterializerSource不再有效,但我们实际上可以这样做

         builder
        .Entity<ESDataQuotation>()
        .Property(e => e.CreatedDate)
        .HasConversion(v => v, v => DateTime.SpecifyKind(v, DateTimeKind.Utc));
Run Code Online (Sandbox Code Playgroud)

但是,我有许多DateTime的属性,我想如果有一种方法可以为DateTime类型的所有属性进行转换.

c# entity-framework-core asp.net-core

14
推荐指数
3
解决办法
7325
查看次数

GetEntityTypes:使用EF Core中的.Property <TEntity>的通用版本配置实体属性

在我的EF核心项目中,我有一些从基类DBEntity继承的实体:

public abstract class DBEntity
{
    public int Id { get; set; }

    public DateTime CreatedOn { get; set; }

    public DateTime UpdatedOn { get; set; }

    public EntityStatus EntityStatus { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想为从DBEntity继承的每个实体设置一些具有默认值的特定属性.目前我正在使用此代码:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {

        var entities = modelBuilder.Model
            .GetEntityTypes()
            .Where(w => w.ClrType.IsSubclassOf(typeof(DBEntity)))
            .Select(p => modelBuilder.Entity(p.ClrType));

        foreach (var entity in entities)
        {

            entity
                .Property("CreatedOn")
                .HasDefaultValueSql("GETDATE()");

            entity
                .Property("UpdatedOn")
                .HasComputedColumnSql("GETDATE()");

            entity
                .Property("EntityStatus")
                .HasDefaultValue(EntityStatus.Created);

        }
    }
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我不想使用字符串常量指定属性名称(对于重构等不好).

有没有办法循环从DBEntity继承的实体并使用属性表达式配置默认值,如下所示:

foreach (var entity in entities)
{
    entity
      .Property(k …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-core ef-core-2.0

3
推荐指数
1
解决办法
684
查看次数

Ef core fluent api设置所有列类型的接口

不幸的是,ef core不支持TPC模式,但我们需要这种行为.我写了一个名为IBase的接口,每个实体都实现了这个接口:

public interface IBase
{
    Guid Id { get; set; }

    [Column(TypeName = "datetime2")]
    DateTime CreateDate { get; set; }

    [Required]
    [StringLength(255)]
    string CreateUser { get; set; }

    bool Deleted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想摆脱Annotations来改为使用Fluent API配置.但我有大约20个不同的实体和7个Base-Values,我不想一遍又一遍地做出相同的配置:

 modelBuilder.Entity<SomeEntity>()
            .Property(e => e.CreateDate)
            .HasColumnType("datetime2(2)")
            .IsRequired();
Run Code Online (Sandbox Code Playgroud)

任何想法如何为所有实施IBase的实体配置一次Base-Property?

c# entity-framework entity-framework-core ef-fluent-api .net-core

2
推荐指数
1
解决办法
2247
查看次数