使EF了解通用复杂类型

时间:2017-06-14 14:26:14

标签: c# entity-framework reflection

在MyDbContext的OnModelCreating中,我有一段代码执行以下操作。

 modelBuilder.Types()
     .Having(t => t.IsConcreteImplementationOf(typeof(MyClass<>)) ? t : null)
     .Configure((c, t) =>
                {
                    c.IsComplexType();
                    //...
                });

我倾向于为MyClass&lt;属性做一些自定义映射。 T>,实际上工作得很好,只要有一个非泛型类继承它。 (我将遗漏有关MyClass和自定义映射的详细信息)

所以:如果有

,它可以正常工作
class MyClassString : MyClass<String> {}

class MyEntity {
     MyClassString MyProperty { get; set; }
}

但是,当我写作时,它不起作用

class MyEntity {
     MyClass<String> MyProperty { get; set; }
}

我完全理解EF无法配置开箱即用的通用类型(它必须为T的每个值调用Configure。所以它必须知道哪些值用于T,它不能将它们全部配置...)。

我试过

modelBuilder.RegisterEntityType(typeof(MyClass<String>));

但是这给出了错误:

  

类型&#39; EntityField`1&#39;已经配置为实体   类型。它不能重新配置为复杂类型。

这实际上是戒烟的承诺:-)这意味着MyClass&lt;字符串&gt;已注册为实体,已提供配置。

我想我基本上需要做

modelBuilder.RegisterComplexType(typeof(MyClass<String>));

不幸的是,这种方法不存在: - (

如何做到这一点?我完全没有在MyDbContext中获得T支持的类型列表。

0 个答案:

没有答案