► 當 Model 資料異動後, 必須設定 Entry.state, 如 storeDB.Entry(order).State = EntityState.Modified; 否則雖然執行 storeDB.SaveChanges(); 異動資料仍然不會回寫到資料庫內.
► Model, 表單驗證使用的參數 (Data Annotation attributes)
► 當系統出現"已經開啟一個與這個 Command 相關的 DataReader,必須先將它關閉"
► 當系統出現"無法完成操作. 提供的 SqlConnection 未指定初始目錄", 則 connectionStrings 增加 Initial Catalog 參數即可
► Model, 表單驗證使用的參數 (Data Annotation attributes)
Required – 表示必須提供內容的欄位. [Required(ErrorMessage = "這欄位必須輸入資料")]
DisplayName 顯示名 – 定義表單字段的提示名稱. [Display(Name = "類型")]
StringLength 字串長度 – 定義字串類型的屬性的最大長度. [StringLength(10), ErrorMessage = "最多輸入10個字") ]
Range – 為數位類型的屬性提供最大值和最小值. [Range(1,100)]
Bind – 列出在將請求參數綁定到模型的時候,包含和不包含的欄位
ScaffoldColumn - 在編輯表單的時候,需要隱藏起來的的字元. [ScaffoldColumn(false)]
RegularExpression - 正規化資料格式驗證. [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
ErrorMessage = "無效的 Email 格式")]
db 相關參數
Key - 告訴系統此欄位為主鍵(primary key)
DataType - 告訴系統此欄位資料型態. [DataType(DataType.EmailAddress)]
DisplayName 顯示名 – 定義表單字段的提示名稱. [Display(Name = "類型")]
StringLength 字串長度 – 定義字串類型的屬性的最大長度. [StringLength(10), ErrorMessage = "最多輸入10個字") ]
Range – 為數位類型的屬性提供最大值和最小值. [Range(1,100)]
Bind – 列出在將請求參數綁定到模型的時候,包含和不包含的欄位
ScaffoldColumn - 在編輯表單的時候,需要隱藏起來的的字元. [ScaffoldColumn(false)]
RegularExpression - 正規化資料格式驗證. [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
ErrorMessage = "無效的 Email 格式")]
db 相關參數
Key - 告訴系統此欄位為主鍵(primary key)
DataType - 告訴系統此欄位資料型態. [DataType(DataType.EmailAddress)]
► 當系統出現"已經開啟一個與這個 Command 相關的 DataReader,必須先將它關閉"
表示 DB 一個 connect 僅允許對應一個 DataReader, 若要同時對應一個以上時, 則需在 connectionString 內, 加入 MultipleActiveResultSets=true 參數來開啟
► 當系統出現"無法完成操作. 提供的 SqlConnection 未指定初始目錄", 則 connectionStrings 增加 Initial Catalog 參數即可
<connectionStrings> <add name="StoreEntities" connectionString="data source=.\SQLEXPRESS; Initial Catalog=MyStore; AttachDBFilename=|DataDirectory|MyStore.mdf; Integrated Security=SSPI" providerName="System.Data.SqlClient" /> </connectionStrings>
► 載入關聯資料的方式
//Model public class Genre { public string Name { get; set; } public List<Album> Albums { get; set; }//關聯資料 } var genreModel = new Genre { Name = genreName };//此方式, Genre 關聯的 Albums 不會自動連結資料 //下方式則一併載入 Albums, 如同 sql 的 left join Album g on(g.Name=genreName) var genreModel = storeDB.Genres.Include("Albums").Single(g => g.Name == genreName);