通用实体框架映射

时间:2017-01-19 18:16:05

标签: c# .net entity-framework reflection lambda

开始我是Expression和Func的新手。

我正在尝试避免在我的EF映射类中重复代码,而且我遇到了糟糕的数据库。

采用以下示例地图类:

<p class="premiumOnly" id="p">
  <strong>Original bar admit date:</strong> 5/10/1974<br>
  <strong>Colorado bar admit date:</strong> 5/10/1974
</p>

public class EntityMap : EntityTypeConfiguration<Entity> { public EntityMap() { Property(x => x.PropertyA.Property); Property(x => x.PropertyB.Property); } } PropertyA的类型相同,且属性很多 是否可以通过简单的方法重构此方法,在参数中传递PropertyBx => x.PropertyA并执行PropertyB之类的操作?如何 ? 方法可能是这样的:

Property(x => x. methodParemeter Property);

1 个答案:

答案 0 :(得分:0)

您可以使用基类和接口。

<强>模型

public interface IEntity
{
    string PropertyA { get; set; }
    string PropertyB { get; set; }
}

public class EntityA : IEntity {
    public string PropertyA { get; set; }
    public string PropertyB { get; set; }
}

public class EntityB : IEntity
{
    public string PropertyA { get; set; }
    public string PropertyB { get; set; }
}

基础课程

public abstract class IEntityMap<T> : EntityTypeConfiguration<T> where T : class, IEntity
{
    protected IEntityMap()
    {
        this.Property(x => x.PropertyA);
        this.Property(x => x.PropertyB);
    }
}

Mapper实施

使用DbContext类型注册这些内容。

public class EntityAMap : IEntityMap<EntityA>
{
    public EntityAMap() : base()
    {
    }
}

public class EntityBMap : IEntityMap<EntityB>
{
    public EntityBMap() : base()
    {
    }
}