在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支持的类型列表。