Entity framework core 仅允许对实体框架的属性进行写访问

Entity framework core 仅允许对实体框架的属性进行写访问,entity-framework-core,asp.net-core-2.0,Entity Framework Core,Asp.net Core 2.0,是否有任何方法只允许实体框架类写入/读取EmailJson属性?代码可以在没有这个的情况下工作,但是如果这个属性不能被任何代码更改,那么它会更干净,因为在其中包含无效的json会引发异常 由于通用要求,我无法使用支持属性 public class EmailEntity { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; } public

是否有任何方法只允许实体框架类写入/读取
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);
    }
}
公共类电子邮件实体
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共Guid Id{get;set;}
公共字符串EmailJson{get;set;}
public T GetEmail(),其中T:BaseEmailModel
{
返回JsonConvert.DeserializeObject(EmailJson);
}
public void GetEmail(T emailModel),其中T:BaseEmailModel
{
EmailJson=JsonConvert.SerializeObject(emailModel);
}
}

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

因此,最后你(至少)有三个项目:

1:实体项目

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

3:业务逻辑项目(参考2而不是1,以防止直接访问实体)


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

所以我将实体隐藏在Dao后面,并使用不同的程序集限制对实体的访问?比我希望的要复杂得多,但它会起作用,我想没有其他方法可以做到这一点?谢谢:-)我想这听起来比它更复杂-这项工作不会超过10分钟。如果您曾经这样做过,那么多层体系结构将成为您编写代码的自然选择。除了您的问题之外,您还会注意到其他好处(分离关注点、更容易与基于团队的开发集成、测试、促进组件交换等)。