在.Net Core 3.1 OData EDMModelBuilder中公开私有Setter

在.Net Core 3.1 OData EDMModelBuilder中公开私有Setter,odata,asp.net-core-webapi,asp.net-core-3.1,Odata,Asp.net Core Webapi,Asp.net Core 3.1,如何使用EDMBuilder for.Net Core 3.1 OData在具有受保护或私有Setter的类上公开属性 例如: public class Person { public int Id { get; set; } public string Name { get; protected set; } } public class SomeClassToBuildEdmModel { public static IEdmModel GetEdmModel( ISer

如何使用EDMBuilder for.Net Core 3.1 OData在具有受保护或私有Setter的类上公开属性

例如:

public class Person
{
   public int Id { get; set; }
   public string Name { get; protected set; }
}

public class SomeClassToBuildEdmModel
{
   public static IEdmModel GetEdmModel( IServiceProvider serviceProvider )
   {
      var builder = new ODataConventionModelBuilder( serviceProvider );
      builder.EntitySet<Person>(nameof(Person)).EntityType.HasKey( e => e.Id );
   }
}
公共类人物
{
公共int Id{get;set;}
公共字符串名称{get;protected set;}
}
公共类SomeClassToBuildModel
{
公共静态IEdmModel GetedModel(IServiceProvider服务提供程序)
{
var builder=新ODataConventionModelBuilder(服务提供商);
builder.EntitySet(nameof(Person)).EntityType.HasKey(e=>e.Id);
}
}
在端点上执行Get将仅检索Id,而不是名称。构建器将忽略具有私有或受保护setter的任何属性

如何在不删除受保护的访问修饰符的情况下覆盖该属性或公开该属性

我确实找到了这个链接:

但由于这个答案已经有2年了,我希望有一个更优雅或更简单的解决方案

更新: 我补充说:

public class SomeClassToBuildEdmModel
{
   public static IEdmModel GetEdmModel( IServiceProvider serviceProvider )
   {
      var builder = new ODataConventionModelBuilder( serviceProvider );
      var personConfig = builder.EntityType<Person>();
      personConfig.HasKey( e => e.PersonId );
      **personConfig.Property( e => e.Name ).IsOptional();**
      builder.EntitySet<Person>(nameof(Person));
   }
}
公共类someclasstobuildedModel
{
公共静态IEdmModel GetedModel(IServiceProvider服务提供程序)
{
var builder=新ODataConventionModelBuilder(服务提供商);
var personConfig=builder.EntityType();
personConfig.HasKey(e=>e.PersonId);
**personConfig.Property(e=>e.Name).iso可选()**
builder.EntitySet(姓名(人));
}
}
这似乎奏效了。然而,这似乎有点可疑。。。有更好的办法吗