我想更改我的ODATA服务公开的所有实体的命名空间。
现在他们得到了:Core.DomainModel.Entities.Database
在消费它时有点长。
我试图通过builder.Namespace = "MyModel";
进行设置,但这没有效果。
var builder = new ODataConventionModelBuilder();
builder.Namespace = "MyModel";
然后我想我必须在每个实体上设置它,如此
builder.EntitySet<Foo>("Foo").EntityType.Namespace = "MyModel";
但是当我不得不通过每个实体时,这很快就会失控:(
然后我尝试了这个
foreach (var entity in builder.EntitySets)
{
entity.EntityType.Namespace = "MyModel";
}
但这并不包括所有内容。我注意到ENUM,ComplexTypes和一些实体没有得到正确的命名空间......:/
所以我的问题是。 如何为每个实体设置命名空间?
答案 0 :(得分:1)
一种解决方案是从ODataConventionModelBuilder派生一个新类,然后实现一些覆盖。
public class ODataExtendedConventionModelBuilder : ODataConventionModelBuilder
public override ComplexTypeConfiguration AddComplexType(Type type)
{
var x = base.AddComplexType(type);
x.Namespace = Namespace;
return x;
}
public override EntityTypeConfiguration AddEntityType(Type type)
{
var x = base.AddEntityType(type);
x.Namespace = Namespace;
return x;
}
public override EnumTypeConfiguration AddEnumType(Type type)
{
var x = base.AddEnumType(type);
x.Namespace = Namespace;
return x;
}
public override void AddProcedure(ProcedureConfiguration procedure)
{
procedure.Namespace = Namespace;
base.AddProcedure(procedure);
}
}
在此示例中,我使用ODataModelBuilder.Namespace属性来确定要为每个实体配置的命名空间。但是,您可以执行各种操作来确定要使用的命名空间。
答案 1 :(得分:0)
您在每个实体上设置命名空间所做的是正确的,builder.Namespace用于容器的命名空间,而不是每个实体。