仅允许对实体的属性进行写访问

时间:2018-07-23 19:06:16

标签: entity-framework-core asp.net-core-2.0

有什么方法只能允许Entity Framework类写入/读取EmailJson属性吗?代码无需使用此代码即可工作,但是如果任何代码都无法更改此属性,则它会更加干净,因为其中包含无效的json会引发异常。

由于通用要求,我无法使用后备属性。

public class EmailEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    public string EmailJson { get; set; }

    public T GetEmail<T>() where T : BaseEmailModel
    {
        return JsonConvert.DeserializeObject<T>(EmailJson);
    }

    public void  GetEmail<T>(T emailModel) where T : BaseEmailModel
    {
        EmailJson = JsonConvert.SerializeObject(emailModel);
    }
}

1 个答案:

答案 0 :(得分:1)

我建议使用单独的数据访问层(例如,类“ EmailEntityService”)来负责对EmailEntity的所有访问。然后,整个解决方案中的所有代码都应仅使用此服务。如果将EmailEntity移至单独的项目,则可以确保只能通过EmailEntityService对其进行访问(如果您将该服务保留在引用“实体项目”的项目中)。

所以最后,您至少有三个项目:

1:实体项目

2:实体服务项目(参考1,该项目可确保不能直接更改实体)

3:业务逻辑项目(引用2而不引用1以防止直接访问实体)

由于实体类只是POCO,因此我看不到有其他任何可能性可以以更具技术性/基本的方式做到这一点。