.net 从数据库中获取对象后,如何设置值?

huwehgph  于 2023-03-04  发布在  .NET
关注(0)|答案(3)|浏览(134)

我有一个名为FighterModel的对象,在我的存储库服务中,我从SQL Server获取属性。

public class FighterModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int QtyMartialArts { get; set; }
    public int QtyDefeats { get; set; }
    public int QtyVictories { get; set; }

    [NotMapped]
    public int QtyFights { get; set; }
}

我希望QtyFightsQtyVictoriesQtyDefeats之和,在从实体获取数据后,我如何才能做到这一点?
我尝试在构造函数中执行函数和设置,但它不起作用。

public class FighterModel
{
    public FighterModel() 
    {
        AtualizaLutas();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public int QtyMartialArts { get; set; }

    [NotMapped]
    public int QtyFights { get; set; }

    public int QtyDefeats { get; set; }
    public int QtyVictories { get; set; }

    private void AtualizaLutas()
    {
        QtyFights = QtyVictories + QtyDefeats;
    }
}
mqkwyuun

mqkwyuun1#

如果你不需要设置QtyFights的值,你可以直接执行

[NotMapped]
public int QtyFights => QtyVictories + QtyDefeats;
vatpfxk5

vatpfxk52#

您可以尝试使用私有getter来代替函数
通过指定字段的访问级别、属性的类型、属性的名称以及声明get访问器和/或set访问器的代码块,在类块中声明属性。

public int QtyFights 
{
    get { return QtyVictories + QtyDefeats; };
    set { name = value; }
}

Read more
Here
编辑:但是如果你想用一个函数来覆盖。

public int QtyFights 
{
    get => AtualizaLutas();
    set { name = value; }
}

public virtual int AtualizaLutas()
{
   return QtyVictories + QtyDefeats;
}

如果你使它成为公共的和虚拟的,你可以让调用者用他们想要的东西覆盖这个函数。

dldeef67

dldeef673#

它在构造函数中不起作用,因为属性绑定是在创建示例之后完成的。您正在尝试对“整数”类型的“QtyVictories”和“QtyDefeats”的默认值求和,该值等于零(0)。这意味着,QtyFights值始终保持为零(0)

仅声明属性只有getter,如下所示:

public int QtyFights { get { return QtyVictories + QtyDefeats; } }

相关问题