OData:使用 ODataConventionModelBuilder 映射继承的键
OData: Map inherited key using ODataConventionModelBuilder
有这些:
class Base
{
public int ID {get;set;}
}
class DerivedA : Base
{
}
class DerivedB : Base
{
}
...
然后我可以像这样设置公共主键:
builder.EntityType<Base>().HasKey(m => m.ID);
但是,当我这样做时,每个派生类型都会被映射,这出于各种原因是不受欢迎的,其中之一是我有几十个派生类型。耐心地,我试图忽略每一个我不想要的,结果我得到了这个错误:
The sequence contains more than one element
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Web.OData.Builder.ODataConventionModelBuilder.RemoveBaseTypeProperties(StructuralTypeConfiguration derivedStructrualType, StructuralTypeConfiguration baseStructuralType)
at System.Web.OData.Builder.ODataConventionModelBuilder.DiscoverInheritanceRelationships()
at System.Web.OData.Builder.ODataConventionModelBuilder.GetEdmModel()
我相信忽略最终会以某种方式相互重叠。我只是无法为其中的每一个微调忽略块。到目前为止唯一有效的方法是为每个派生 class 将 ID 属性重新定义为新的,这几乎违背了基础 class.
的全部目的
有什么建议吗?
有很多问题需要考虑,我在多次试验和错误中没有看到的遗留问题是,除了基础 class 的 ID 映射之外,我还为派生映射了相同的 ID classes:
builder.EntityType<Base>().HasKey(m => m.ID);
...
(in another class far far away)
builder.EntityType<DerivedA>().HasKey(m => m.ID);
builder.EntityType<DerivedB>().HasKey(m => m.ID);
我删除了派生 classes 上的键映射,只保留了 Base class 上的键映射,一切正常。所以我想这与忽略无关。
多么神秘的通用错误消息...
我用这些新信息更新了 a blog post,查看它以获取更多信息,包括如何忽略派生类型。
有这些:
class Base
{
public int ID {get;set;}
}
class DerivedA : Base
{
}
class DerivedB : Base
{
}
...
然后我可以像这样设置公共主键:
builder.EntityType<Base>().HasKey(m => m.ID);
但是,当我这样做时,每个派生类型都会被映射,这出于各种原因是不受欢迎的,其中之一是我有几十个派生类型。耐心地,我试图忽略每一个我不想要的,结果我得到了这个错误:
The sequence contains more than one element
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Web.OData.Builder.ODataConventionModelBuilder.RemoveBaseTypeProperties(StructuralTypeConfiguration derivedStructrualType, StructuralTypeConfiguration baseStructuralType)
at System.Web.OData.Builder.ODataConventionModelBuilder.DiscoverInheritanceRelationships()
at System.Web.OData.Builder.ODataConventionModelBuilder.GetEdmModel()
我相信忽略最终会以某种方式相互重叠。我只是无法为其中的每一个微调忽略块。到目前为止唯一有效的方法是为每个派生 class 将 ID 属性重新定义为新的,这几乎违背了基础 class.
的全部目的有什么建议吗?
有很多问题需要考虑,我在多次试验和错误中没有看到的遗留问题是,除了基础 class 的 ID 映射之外,我还为派生映射了相同的 ID classes:
builder.EntityType<Base>().HasKey(m => m.ID);
...
(in another class far far away)
builder.EntityType<DerivedA>().HasKey(m => m.ID);
builder.EntityType<DerivedB>().HasKey(m => m.ID);
我删除了派生 classes 上的键映射,只保留了 Base class 上的键映射,一切正常。所以我想这与忽略无关。
多么神秘的通用错误消息...
我用这些新信息更新了 a blog post,查看它以获取更多信息,包括如何忽略派生类型。