【问题标题】:Only allow write access on property to Entity Framework只允许对实体框架的属性进行写访问
【发布时间】:2018-12-31 07:25:26
【问题描述】:

有没有办法只允许实体框架类写入/读取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);
    }
}

【问题讨论】:

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


    【解决方案1】:

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

    所以最后你有(至少)三个项目:

    1:实体项目

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

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

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

    【讨论】:

    • 所以我将我的实体隐藏在道后面,并使用不同的程序集来限制对实体的访问?比我希望的要复杂得多,但它会起作用,我想没有其他方法可以做到这一点?谢谢:-)
    • 我想这听起来比实际复杂得多——这项工作不会超过 10 分钟。如果您曾经这样做过,多层架构将成为您编写代码的自然之选。除了您的问题之外,您还会注意到其他优点(关注点分离、更容易与基于团队的开发集成、测试、促进组件交换等)。
    猜你喜欢
    • 2022-01-03
    • 2023-03-18
    • 1970-01-01
    • 2013-07-10
    • 2016-08-26
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多