Validating partially filled objects
Review

You should avoid hardcoded strings. Take advantage of nameof. Also, expression-bodied members (arrow notation) makes code cleaner to read.

public string Name
{
    get =&gt; GetFieldValue&lt;string&gt;(nameof(Name));
    set =&gt; SetFieldValue(nameof(Name), value);
}


EntitySubset&lt;T&gt;'s method GetFieldValue makes sure a clean (but technical) error message is thrown whenever an asked field is not available. 


public override U GetFieldValue&lt;U&gt;(string fieldName)
{
    if (!Fields.ContainsKey(fieldName))
    {
        throw new Exception($"{typeof(T).Name} must contain {fieldName} as a key!");
    }
    return base.GetFieldValue&lt;U&gt;(fieldName);
}



However, don't fallback to this method to perform business rules checks. The business layer should check that mandatory fields are filled in, before mapping the entities to the data layer.

You should also optimize ContainsKey and base.GetFieldValue. You don't want to perform 2 lookups here. Implement something like a TryGetFieldValue.