中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

EF架構(gou)~充血模型設置不被持(chi)久化的屬性

回到目錄

在Poco實體中,一般只有屬性沒有方法,這在軟件設計中稱為貧血模型,而在DDD領域驅動設計中,比較提倡充血模型,即你的Poco實體中,即有屬性,也有操作屬性的方法,注意這里說的是操作屬性的方法,你的具體業務方法不要寫在這里

而在實際項(xiang)目中,我(wo)(wo)(wo)們(men)(men)可以有這(zhe)樣(yang)的需求,一個注(zhu)冊用戶業務,它有密(mi)碼和(he)確認密(mi)碼,這(zhe)個確認密(mi)碼不需要存(cun)儲到(dao)數據表(biao)里,即不需要被持久(jiu)化,這(zhe)時(shi),我(wo)(wo)(wo)們(men)(men)想到(dao)的就是(shi)為它加NonSerialized特性,而在使用過程中我(wo)(wo)(wo)們(men)(men)發現,這(zhe)個特性只針對字段而言(yan),而我(wo)(wo)(wo)們(men)(men)的實體中推薦(jian)使用屬性的方式,所以我(wo)(wo)(wo)們(men)(men)需要尋找其它解決方案。

而對于  System.ComponentModel.DataAnnotations.Schema命名空間來說,確實有一個更好的特性適合我們的需求,這個就是NotMapped特性,從它的注釋中可以看出,它主要功能就是從數據庫映射中移除它,即數據表中不體現(xian)這(zhe)個屬性,現(xian)在我(wo)們代(dai)(dai)碼代(dai)(dai)碼修改一(yi)下,使(shi)用NotMapped實現(xian)的(de)實體模型(xing):

    /// <summary>
    /// 用戶實(shi)體模(mo)式
    /// </summary>
    public class UserInfo : Entity
    {
        /// <summary>
        /// maxLength和stringLength都可以(yi)用來設置(zhi)數據表字段的長(chang)度,stringLength不可以(yi)用來做MVC驗證
        /// </summary>
        [DisplayName("用戶名"), Required, StringLength(50, MinimumLength = 6, ErrorMessage = "用(yong)戶名(ming)只(zhi)能由6~50個字符組成")]
        public string UserName { get; set; }
        [DisplayName("真實姓名"), Required, StringLength(30, MinimumLength = 6, ErrorMessage = "真實(shi)姓名(ming)只能由(you)6~30個字符組成")]
        public string RealName { get; set; }
        public UserExtension UserExtension { get; set; }
        public List<OrderInfo> OrderInfo { get; set; }
        [DisplayName("密碼"), StringLength(20, MinimumLength = 8, ErrorMessage = "密碼由8~20個(ge)字符組成")]
        public string Password { get; set; }
        [DisplayName("確(que)認密(mi)碼"), NotMapped]
        public virtual string TruePassword { get; set; }

        #region 充血模型的方法
        /// <summary>
        /// 生成MD5密碼
        /// </summary>
        /// <returns></returns>
        public string Md5Password()
        {
            return Lind.DDD.Commons.Encryptor.Utility.EncryptString(Password, Commons.Encryptor.Utility.EncryptorType.MD5);
        }
        /// <summary>
        /// 密碼(ma)和確認密碼(ma)的比較(jiao)
        /// </summary>
        /// <returns></returns>
        public bool Password_TruePassword()
        {
            return this.Password.Equals(this.TruePassword, StringComparison.CurrentCulture);
        }
        #endregion

    }

 

運(yun)行程序后,我們(men)在數據表(biao)UserInfo中沒(mei)有找到TruePassword這(zhe)個字段,這(zhe)說明NotMapped已經(jing)幫我們(men)實現了我們(men)想要的功(gong)能!

通過上面(mian)的(de)(de)代碼,我們也看(kan)到了在(zai)DDD領域(yu)驅動里充血模型(xing)的(de)(de)實現,需要注意的(de)(de)地方就(jiu)是什么樣的(de)(de)方法應該(gai)(gai)寫在(zai)模型(xing)里,什么樣的(de)(de)方法應該(gai)(gai)寫在(zai)業務層。

回到目錄

posted @ 2015-10-23 13:29  張占嶺  閱讀(2306)  評論(0)    收藏  舉報