MVC3+EntityFramework實踐筆記


最近項目想做一個員工統一工號生成的系統,本來可以直接讓別的同事來做的,不過大家都在項目上忙不開,剛好也可以練練手於是就接過這個項目。之前雖然一直對MVC和Entity Framework有點了解,但是實際使用的時候還是有很多問題。本文是記錄在項目開發過程中遇到的第一手問題及解決辦法。 

1. DataContext的選擇

image

遇到的第一個問題就是DtaContext的選擇,之前以為根據生成的EDMX就可以直接選擇Model生成Controller及View了。 不知道還需要Data context。好吧,初步查了一下Data Context是相關的底層數據連接、數據集定義的。

所以在生成Controller 的時候就選擇表的類及創建時生成的Entity即可。

 

2. 數據校驗

MVC提供了比較多的數據校驗功能,但是很多提示是英文的

        [Required(ErrorMessage =  " 必填 ")]
        [DataType(DataType.Text)]
        [IDCardCheck]
        [Display(Name =  " 身份證號 ")]
         public  string PersonalID {  getset; }

一個簡單辦法就是聲明ErrorMessage值,輸入中文的錯誤提示信息。

如果需要自定義的驗證的話,如上代碼中的IDCardCheck,可以繼承ValidationAttribute來實現

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple =  false, Inherited =  true)]
     public  class IDCardCheckAttribute : ValidationAttribute
    {
        CheckHelper checkHelper =  new CheckHelper();
        SSOEntities SSODB =  new SSOEntities();
         public  override  bool IsValid( object value)
        {
             if ( null == value)
                 return  false;
             try
            {
                 string personalID = value.ToString();
                 if (checkHelper.CheckIDCard(personalID))
                {
                     int count = ( from p  in SSODB.t_UserInfo  where p.PersonalID == personalID  select p).Count();
                     if (count >  0)
                    {
                        ErrorMessage =  " 該身份證號碼已存在! ";
                         return  false;
                    }
                }
                 else
                {
                    ErrorMessage =  " 請輸入正確的身份證號碼 ";
                     return  false;
                }

                 return  true;
            }
             catch (Exception exp)
            {
                ErrorMessage =  " 請輸入正確的身份證號碼 ";
                 return  false;
            }
        }
    }

3. 映射存儲過程

EDMX支持將存儲過程映射到實體類的添加、刪除、修改中。

image

image

映射之后調用的時候還是可以用類似於SSODB.t_UserInfo.AddObject(xxx);這種方式來調用但是實際執行的時候是執行存儲過程了。

3. 導入存儲過程方法

如果你想在存儲過程里直接使用存儲過程的方法,那么可以在Model Brower里的 Function Imports里導入存儲過程。

image

在代碼里直接使用:

SSODB.DeleteEmployee(id, currentUser);

 

4. CodeFirst 實現

EF4.1 開始引入了Model First/Database First/Code First 等功能,由於這個項目是在之前項目的項目上改過來的。所以沒有完全用Code First來做。不過在找解決辦法的過程中還是試了一下Code First。以下為 Code First相應的Model Class及Data Class的代碼:

     public  class UserIDInfo
    {
        [Key]
         public  int UserId {  getset; }
         public  string Name {  getset; }
         public System.DateTime CreateTime {  getset; }
         public Nullable CreateUser {  getset; }
         public  string status {  getset; }
         public  string Sex {  getset; }
         public  string PersonalID {  getset; }
         public  string StaffNumber {  getset; }
         public Nullable EntryDate {  getset; }
         public Nullable SequenceNumber {  getset; }
    }

     public  class UserIDContext : DbContext
    {
         public UserIDContext()
            :  base( " UserIDInfoConnect ")
        {
        }
         public DbSet UserIDInfos {  getset; }
     
    }

Web.Config的配置

 

   < connectionstrings >
< add  name ="UserIDInfoConnect"  connectionstring ="data source=.\SQLEXPRESS;Integrated Security=SSPI;initial catalog=SSO;User Instance=true"  providername ="System.Data.SqlClient"   />
   </ connectionstrings >

 

5. 代碼雲存儲

特別需要說明的是這次使用酷盤+TFS的方式來管理代碼。因為我在公司和家里總共有兩台電腦,家里的網絡又連不到TFS,因此需要代碼同步,但是用U盤拷來拷去的太不方便了。因此想到了用酷盤作為代碼文件的同步。當然我把數據庫文件也作為同步的項了。這樣在公司寫完代碼如果還想回家寫的話直接到家打開電腦即可。還有最重要的一點是酷盤有版本控制的功能。這個項目里由於我脫離了TFS開發了好長時間,后來想把最新的代碼遷到TFS上,倒騰了半天把好幾個重要的文件都給弄丟了。還好在酷盤的已刪除里找到了,不然就白努力了。

因此推薦給大家這個工具 訪問地址:http://kb.vc/qCgf (通過該鏈接訪問我可以增長點免費空間,感謝您的支持!),我使用過Dropbox/SkyDrive/微盤/快盤等幾個工具,覺得在國內訪問速度還有空間還是酷盤最好。

image

不過有一點需要提醒的是光有酷盤可能還是行。因為你無法為代碼生成結構化的版本,比較打標簽之類的。因此還要結合TFS來做代碼的管理。

 

6.總結

通過小一周的開發體驗覺得MVC+Entity Framework對於.NET 的Web開發來說還是強大了不少,當然由於開發時間緊以上的概念之外我可能說得不太准確,歡迎大家批評指證,以后得繼續努力學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM