Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
C# 在创建更新场景中处理私有setter和id_C#_.net_Oop - Fatal编程技术网

C# 在创建更新场景中处理私有setter和id

C# 在创建更新场景中处理私有setter和id,c#,.net,oop,C#,.net,Oop,问题是如何在这里处理Id属性以创建和更新。 我是否需要在构造函数中增加一个id属性为的构造函数来创建操作 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; }

问题是如何在这里处理Id属性以创建和更新。 我是否需要在构造函数中增加一个id属性为的构造函数来创建操作

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;
    }
}

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

因为
实体
是抽象的,并且您知道您希望通过构造函数设置
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); 
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;
    }
}