代码之家  ›  专栏  ›  技术社区  ›  Mathieu VIALES Pavel

只允许对实体框架的属性进行写访问

  •  0
  • Mathieu VIALES Pavel  · 技术社区  · 6 年前

    是否有任何方法只允许实体框架类写入/读取 EmailJson 财产代码在没有这个的情况下工作,但是如果这个属性不能被任何代码更改,那么它会更干净,因为在这个属性中包含无效的json会抛出一个异常。

    由于一般要求,我不能使用backing属性。

    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 回复  |  直到 6 年前
        1
  •  1
  •   Grimm    6 年前

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

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

    1:实体项目

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

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

    因为实体类只是poco,所以我不认为有任何其他可能性可以用更技术/更基本的方式来实现这一点。