【问题标题】:Mapping Common Properties only once for the whole Model in Entity Framework 7在 Entity Framework 7 中为整个模型仅映射一次公共属性
【发布时间】:2016-03-20 06:48:03
【问题描述】:

在我的域模型中,我尝试仅为 EntityBase 子类的实体设置公共属性的映射。为此,我尝试使用 IsAssignableFrom 进行过滤,但它没有给出任何结果,并且这些属性不会发生映射。

任何关于如何解决 IsAssignableFrom 问题的建议,或任何其他验证实体层次结构的方法都将不胜感激。

        protected override void OnModelCreating(ModelBuilder modelBuilder)
                {
                    var types = modelBuilder.Model.GetEntityTypes().Where( entity =>   
            typeof(Domain.Core.Entity).IsAssignableFrom(entity.GetType()));
            foreach (var entType in types)
                    {                 
                         entType.AddProperty("CreatedBy", typeof (string));
                         entType.AddProperty("ModifiedBy", typeof(string));
                         entType.AddProperty("CreatedOn", typeof(DateTime));
                         entType.AddProperty("LastModifiedOn", typeof(DateTime));
                         entType.AddProperty("RowVersion", typeof(byte[]));
                    }
                }

【问题讨论】:

  • 您是否考虑过添加这些属性的接口?
  • @Eris 同样的方式是没有解析接口。这也是阴影属性,所以它们实际上根本不存在于我的模型中。
  • 使用entity.ClrType
  • @GertArnold,简洁有效的评论。 GetEntityTypes 返回 IMutableEntityType 对象,它是 EF 元数据,而 ClrType 属性为我提供了我的真实对象类型。如果您作为答案发布,我会将其标记为已接受。谢谢。

标签: c# .net entity-framework entity-framework-core


【解决方案1】:

我认为IsAssignableFrom 在您的情况下使用不正确:

typeof(Domain.Core.EntityBase).IsAssignableFrom(entity.GetType()) 

如果您的意图是遍历从 EntityBase 派生(直接间接)的所有类型,则应该使用

【讨论】:

  • 感谢您发现该方法的这种错误用法。我用这种方式测试过,但不幸的是它也不起作用。
【解决方案2】:

您在正确的轨道上,但我建议您应该使用纯反射而不是通过模型来获取实体类型。试试这样的:

        var asm = Assembly.Load("Domain.Core");
        foreach(var type in asm.GetTypes())
        {
            if(typeof(Domain.Core.Entity).IsAssignableFrom(type))
            {
                var builder = modelBuilder.Entity(type);
                builder.Property(typeof(string), "CreatedBy");
                // ...
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2011-09-18
    • 2011-10-09
    • 2021-07-02
    相关资源
    最近更新 更多