自动设置数据模型属性

时间:2015-06-03 09:29:42

标签: c# entity-framework asp.net-mvc-4 setter

我正在尝试根据类的同一实例中的两个其他属性值的组合来设置数据模型属性值。我希望在实例化类时自动工作。但是,如果我使用构造函数来执行此操作,则此时不会设置任何其他模型属性。

然后,每当我尝试访问该属性时,都会返回null。关于如何处理这种情况的任何指导都将不胜感激。

型号:

我正在尝试将VersionSchemeCode设置为VersionScheme.SchemeCode的组合值。但是,没有任何内容保存到数据库中。

public class SchemeVersion
{
    private string _VersionSchemeCode;

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public int Version { get; set; }

    [Required]
    public int SchemeId { get; set; }

    [ForeignKey("SchemeId")]
    public virtual Scheme Scheme { get; set; }

    public string VersionSchemeCode
    {
        get
        {
            return _VersionSchemeCode;
        }
        set
        {
            using(var db = new MyDbContext())
            {
                var schemeCode = db.Schemes.SingleOrDefault(x => x.SchemeId == this.SchemeId).SchemeCode;

                _VersionSchemeCode = String.Format("{0}_V{1}", schemeCode, this.Version.ToString());
            }
        }
    }          
}

1 个答案:

答案 0 :(得分:0)

只有几点:

如果计算VersionSchemeCode(而不是持久化),你可以省略getter,让setter根据其他属性值构建字符串。

或者,您可以为VersionScheme使用常规属性(带有私有支持字段),并在设置时更新VersionSchemeCode值。如下所示......(但是,您需要注意,VersionScheme属性发生更改时,VersionSchemeCode将会更新以反映此情况。)

private int _version;

[Required]
public int Version 
{ 
   get 
   { 
      return _version; 
   }
   set; 
   { 
      _version = value; 
      VersionSchemeCode = String.Format("{0}{1}", Version, Scheme.SchemeCode);
   }
}

最后,我并不特别喜欢在我的POCO中包含数据访问代码。理想情况下,POCO应该是数据库和ORM不可知的。我希望通过DataAccessService电话进行某种GetSchemeVersion。这可以检索并补充您的实体,然后在返回之前调用一些函数来填充计算的属性。

public SchemeVersion GetSchemeVersion(int id)
{
        using(var db = new MyDbContext())
        {
            var entity = db.SchemesVersions.SingleOrDefault(x => x.Id == id);
            entity.SetCalculatedValues();
            return entity;
        }         
}