Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 按属性名称的复杂类型约定?_Entity Framework_Entity Framework 6 - Fatal编程技术网

Entity framework 按属性名称的复杂类型约定?

Entity framework 按属性名称的复杂类型约定?,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,复杂类型 public class Timestamp { public string By { get; set; } public DateTime? On { get; set; } } 所需的默认映射 有没有一种方法可以将约定添加到实体框架中,以便将myTimestamp类作为属性(如下所示)的类型默认映射到“CreatedBy”而不是“CreatedBy”?如果是,怎么做 public class StationProductRun { public int

复杂类型

public class Timestamp
{
    public string By { get; set; }
    public DateTime? On { get; set; }
}
所需的默认映射

有没有一种方法可以将约定添加到实体框架中,以便将my
Timestamp
类作为属性(如下所示)的类型默认映射到“CreatedBy”而不是“CreatedBy”?如果是,怎么做

public class StationProductRun
{
    public int Id { get; set; }
    public int PlantProductRunId { get; set; }
    public int StationId { get; set; }
    public string SapProductId { get; set; }
    public Timestamp Created { get; set; }
    public Timestamp Started { get; set; }
    public Timestamp Finished { get; set; }

    public StationProductRun()
    {
        Created = new Timestamp();
        Started = new Timestamp();
        Finished = new Timestamp();
    }
}
  • Created.By=>CreatedBy
  • Created.On=>CreatedOn
  • Started.By=>StartedBy
  • Started.On=>StartedOn
  • Finished.By=>FinishedBy
  • 等等
我知道我可以为每种类型创建
EntityTypeConfiguration
实现,但我已经厌倦了编写这种可搭建的代码并寻找更好的替代方案

我尝试过的

我尝试了下面的方法,但我不确定我是否在这一点上做得很好,它抱怨过滤掉了房产之类的东西。我甚至不确定这是否符合我的要求

modelBuilder.Properties<Timestamp>()
            .Configure(x =>
            {
                if (x.ClrPropertyInfo.DeclaringType == typeof(Timestamp))
                {
                    switch (x.ClrPropertyInfo.Name)
                    {
                        case "By":
                            x.HasColumnName(x.ClrPropertyInfo.Name + "By")
                             .IsOptional();
                            return;
                        case "On":
                            x.HasColumnName(x.ClrPropertyInfo.Name + "On")
                             .IsOptional();
                            return;
                    }
                }
            });
modelBuilder.Properties()
.Configure(x=>
{
if(x.ClrPropertyInfo.DeclaringType==typeof(时间戳))
{
开关(x.ClrPropertyInfo.Name)
{
案例“提交人”:
x、 HasColumnName(x.ClrPropertyInfo.Name+“By”)
.等民族();
返回;
案例“关于”:
x、 HasColumnName(x.ClrPropertyInfo.Name+“On”)
.等民族();
返回;
}
}
});
类型“Timestamp”不能用于筛选属性。仅支持标量类型、字符串和字节[]


这是我将使用的,直到我得到答案。这不是我理想的解决方案,但它比我目前拥有的要好

实体接口

public interface ICreated
{
    Timestamp Created { get; set; }
}

public interface IModified
{
    Timestamp Modified { get; set; }
}
public class EntityConfigCreated<T> : EntityTypeConfiguration<T> where T : class, ICreated
{
    public EntityConfigCreated()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();
    }
}

public class EntityConfigModified<T> : EntityTypeConfiguration<T> where T : class, IModified
{
    public EntityConfigModified()
    {
        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}

public class EntityConfigCreatedModified<T> : EntityTypeConfiguration<T> where T : class, ICreated, IModified
{
    public EntityConfigCreatedModified()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();

        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}
实体类型配置

public interface ICreated
{
    Timestamp Created { get; set; }
}

public interface IModified
{
    Timestamp Modified { get; set; }
}
public class EntityConfigCreated<T> : EntityTypeConfiguration<T> where T : class, ICreated
{
    public EntityConfigCreated()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();
    }
}

public class EntityConfigModified<T> : EntityTypeConfiguration<T> where T : class, IModified
{
    public EntityConfigModified()
    {
        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}

public class EntityConfigCreatedModified<T> : EntityTypeConfiguration<T> where T : class, ICreated, IModified
{
    public EntityConfigCreatedModified()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();

        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}
公共类EntityConfigCreated:EntityTypeConfiguration其中T:class,ICreated
{
公共EntityConfigCreated()
{
this.Property(x=>x.Created.By)
.HasColumnName(“CreatedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Created.On)
.HasColumnName(“CreatedOn”)
.等民族();
}
}
公共类EntityConfigModified:EntityTypeConfiguration,其中T:class,已修改
{
public EntityConfigModified()
{
this.Property(x=>x.Modified.By)
.HasColumnName(“ModifiedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Modified.On)
.HasColumnName(“ModifiedOn”)
.等民族();
}
}
公共类EntityConfigCreatedModified:EntityTypeConfiguration,其中T:class、ICreated、IModified
{
公共实体ConfigCreatedModified()
{
this.Property(x=>x.Created.By)
.HasColumnName(“CreatedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Created.On)
.HasColumnName(“CreatedOn”)
.等民族();
this.Property(x=>x.Modified.By)
.HasColumnName(“ModifiedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Modified.On)
.HasColumnName(“ModifiedOn”)
.等民族();
}
}

这样,我就不必为每种类型实现
EntityTypeConfiguration
,只需实现时间戳属性的每种组合。大多数人刚刚
创建了
修改了
,因此编码大大减少了,但仍然不如使用声明的属性作为命名方案好。

在得到答案之前,我将一直使用它。这不是我理想的解决方案,但它比我目前拥有的要好

实体接口

public interface ICreated
{
    Timestamp Created { get; set; }
}

public interface IModified
{
    Timestamp Modified { get; set; }
}
public class EntityConfigCreated<T> : EntityTypeConfiguration<T> where T : class, ICreated
{
    public EntityConfigCreated()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();
    }
}

public class EntityConfigModified<T> : EntityTypeConfiguration<T> where T : class, IModified
{
    public EntityConfigModified()
    {
        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}

public class EntityConfigCreatedModified<T> : EntityTypeConfiguration<T> where T : class, ICreated, IModified
{
    public EntityConfigCreatedModified()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();

        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}
实体类型配置

public interface ICreated
{
    Timestamp Created { get; set; }
}

public interface IModified
{
    Timestamp Modified { get; set; }
}
public class EntityConfigCreated<T> : EntityTypeConfiguration<T> where T : class, ICreated
{
    public EntityConfigCreated()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();
    }
}

public class EntityConfigModified<T> : EntityTypeConfiguration<T> where T : class, IModified
{
    public EntityConfigModified()
    {
        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}

public class EntityConfigCreatedModified<T> : EntityTypeConfiguration<T> where T : class, ICreated, IModified
{
    public EntityConfigCreatedModified()
    {
        this.Property(x => x.Created.By)
            .HasColumnName("CreatedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Created.On)
            .HasColumnName("CreatedOn")
            .IsOptional();

        this.Property(x => x.Modified.By)
            .HasColumnName("ModifiedBy")
            .HasMaxLength(256)
            .IsOptional();

        this.Property(x => x.Modified.On)
            .HasColumnName("ModifiedOn")
            .IsOptional();
    }
}
公共类EntityConfigCreated:EntityTypeConfiguration其中T:class,ICreated
{
公共EntityConfigCreated()
{
this.Property(x=>x.Created.By)
.HasColumnName(“CreatedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Created.On)
.HasColumnName(“CreatedOn”)
.等民族();
}
}
公共类EntityConfigModified:EntityTypeConfiguration,其中T:class,已修改
{
public EntityConfigModified()
{
this.Property(x=>x.Modified.By)
.HasColumnName(“ModifiedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Modified.On)
.HasColumnName(“ModifiedOn”)
.等民族();
}
}
公共类EntityConfigCreatedModified:EntityTypeConfiguration,其中T:class、ICreated、IModified
{
公共实体ConfigCreatedModified()
{
this.Property(x=>x.Created.By)
.HasColumnName(“CreatedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Created.On)
.HasColumnName(“CreatedOn”)
.等民族();
this.Property(x=>x.Modified.By)
.HasColumnName(“ModifiedBy”)
.HasMaxLength(256)
.等民族();
this.Property(x=>x.Modified.On)
.HasColumnName(“ModifiedOn”)
.等民族();
}
}
这样,我就不必为每种类型实现
EntityTypeConfiguration
,只需实现时间戳属性的每种组合。它们大多数刚刚创建了
和修改了
,因此编码显著减少,但仍然不如使用声明的属性作为命名方案