【问题标题】:Dealing with private setters and id in create update scenario在创建更新场景中处理私有 setter 和 id
【发布时间】:2021-02-19 19:54:18
【问题描述】:
public abstract class Entity
{
    public Guid Id { get; set; }
}

public class Family : Entity
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    
    public Family(string fname, string lname)
    {
        FirstName = fname;
        LastName = lname;
    }
}

问题是如何在此处处理 Id 属性以进行创建和更新。 我是否需要在构造函数中再添加一个具有 id 属性的构造函数来创建操作?

// create
var id = Guid.NewGuid();
var new = new Family(id, "John", "Doe");

// update
 var dbData = _context.Families.FirstOrDefault(x=> x.Id == id);
 var updated = new Family(dbData.FirstName, db.Data.LastName); 

这是推荐的私有 setter 方法吗?

【问题讨论】:

    标签: c# .net oop


    【解决方案1】:

    由于Entity 是抽象的,并且您知道您希望通过构造函数设置Id,并且您的对象是不可变的,您可以通过继承来实现。

    任何派生类型都将被强制调用基构造函数来设置Id

    public abstract class Entity
    {
        public Guid Id { get; private set; }
    
        public Entity(Guid id)
        {
            Id = id == Guid.Empty ? Guid.NewGuid() : id;
        }
    }
    
    public class Family : Entity
    {
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
    
        public Family(string fname, string lname, Guid id = default) : base(id)
        {
            FirstName = fname;
            LastName = lname;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      相关资源
      最近更新 更多