Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.NET核心OData实体,在属性上具有私有setter_Asp.net Core_Odata_Domain Driven Design - Fatal编程技术网

Asp.net core ASP.NET核心OData实体,在属性上具有私有setter

Asp.net core ASP.NET核心OData实体,在属性上具有私有setter,asp.net-core,odata,domain-driven-design,Asp.net Core,Odata,Domain Driven Design,我有这个实体: public int Id { get; private set; } public string Name { get; private set; } public Behavior Behavior { get; private set; } public Product(int id, string name, Behavior behavior) { Id = id; Name = name;

我有这个实体:

    public int Id { get; private set; }
    public string Name { get; private set; }
    public Behavior Behavior { get; private set; }

    public Product(int id, string name, Behavior behavior)
    {
        Id = id;
        Name = name;
        Behavior = behavior;
    }
在启动方法中,我正在注册EDM模型:

        var builder = new ODataConventionModelBuilder();
        var entitySet = builder.EntitySet<Product>("Products");
        entitySet.EntityType.HasKey(x => x.Id);


        var model = builder.GetEdmModel();



        app.UseMvc(route =>
        {
            route.Select().Filter().Expand().OrderBy().Count().MaxTop(null);
            route.MapODataServiceRoute("odata", null, model);
            route.EnableDependencyInjection();
        }
        );

如果我将私人setter更改为公共setter,则所有设置都有效。还有其他具有私有setter的属性:ODataException产品不包含名为“name”的属性。我怎样才能解决它

这个问题很老了,我现在偶然发现了同样的问题。
ODataConventionModelBuilder
无法识别带有私有setter的标量属性(即int、string、bool),即使它可以识别带有私有setter的集合

我可以使用通过模型生成器获得的
EntityTypeConfiguration
解决此问题:

public class Article
{
    public string ArticleNr { get; private set; }
    public string SomeProperty { get; private set; }
}


var builder = new ODataConventionModelBuilder();

var articleBuilder = builder.EntityType<Article>();
articleBuilder.HasKey(a => a.ArticleNr);
articleBuilder.Property(a => a.SomeProperty);

builder.EntitySet<Article>("Articles");

var model = builder.GetEdmModel();
公共类文章
{
公共字符串ArticleNr{get;private set;}
公共字符串SomeProperty{get;private set;}
}
var builder=新的ODataConventionModelBuilder();
var articleBuilder=builder.EntityType();
articleBuilder.HasKey(a=>a.ArticleNr);
articleBuilder.Property(a=>a.SomeProperty);
建造商实体集(“条款”);
var model=builder.GetEdmModel();
这给了我一个可以构建的模型,它可以识别密钥,尽管它是私有setter,我还可以对
SomeProperty
发出查询。但是,通过这种方式,必须使用对
property
的调用显式注册每个属性,这在添加新属性时似乎非常容易出错。我认为它应该能够为它编写一个自定义约定,但到目前为止我还没有尝试过

public class Article
{
    public string ArticleNr { get; private set; }
    public string SomeProperty { get; private set; }
}


var builder = new ODataConventionModelBuilder();

var articleBuilder = builder.EntityType<Article>();
articleBuilder.HasKey(a => a.ArticleNr);
articleBuilder.Property(a => a.SomeProperty);

builder.EntitySet<Article>("Articles");

var model = builder.GetEdmModel();