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; }
}
所需的默认映射
有没有一种方法可以将约定添加到实体框架中,以便将myTimestamp
类作为属性(如下所示)的类型默认映射到“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
,只需实现时间戳属性的每种组合。它们大多数刚刚创建了
和修改了
,因此编码显著减少,但仍然不如使用声明的属性作为命名方案