也提到我參考一篇 code first的文章去做
後來實務上需要新增資料表,所以我決定玩玩看code first的作法
基本操作上其實都沒甚麼問題
實作部分可以參考這兩篇
Entity Framework - 使用Code First模式 Ver 5.0
Entity Framework Code First For PostgreSQL
可是產生出來之後,由於沒有定義欄位屬性
在pgSQL裡面,字串的部分它變成了text...
好,那要如何操作呢?
我們首先來看看一些比較基本的
KEY
使用key,可以讓那個欄位變成主鍵
public class UserInfo
{
[Key]
public int id { get; set; }
public string user_id { get; set; }//使用者帳號
public string user_name { get; set; }//使用者名稱
}
當然,也可以雙主鍵
可是雙主鍵要有先後順序,不然會有錯誤
public class UserInfo
{
[Key]
[Column(Order=1)]
public int id { get; set; }
[Key]
[Column(Order = 2)]
public string user_id { get; set; }//使用者帳號
public string user_name { get; set; }//使用者名稱
}
Index
有KEY當然也可以有索引鍵
注意要自訂名稱
注意要自訂名稱
public class UserInfo
{
[Key]
public int id { get; set; }
[Index("user_info_index")]
public string user_id { get; set; }//使用者帳號
public string user_name { get; set; }//使用者名稱
}
NOT NULL
使用Required
可以讓欄位變成必填
public class UserInfo
{
[Key]
public int id { get; set; }
[Required]
public string user_id { get; set; }//使用者帳號
public string user_name { get; set; }//使用者名稱
}
長度
資料庫一定會有限制長度的時候
可以使用MaxLength,還有另一個比較奇妙的MinLength
public class UserInfo
{
[Key]
public int id { get; set; }
[Required]
public string user_id { get; set; }//使用者帳號
[MaxLength(100),MinLength(5)]
public string user_name { get; set; }//使用者名稱
}
Table and Column
也可以自訂資料表與欄位名稱,不要跟Model一樣
前綴的Schema 也可以動
[Table("user_info", Schema = "public")]
public class UserInfo
{
[Key]
[Column("user_id")]
public int id { get; set; }
public string user_id { get; set; }//使用者帳號
public string user_name { get; set; }//使用者名稱
}
還有個比較特別的
自訂欄位型態
[Table("user_info", Schema = "public")]
public class UserInfo
{
[Key]
[Column("user_id")]
public int id { get; set; }
[Column(TypeName="nchar")]
public string user_id { get; set; }//使用者帳號
[Column(TypeName="nvarchar")]
public string user_name { get; set; }//使用者名稱
}
既然是關聯資料庫,那一定有外來鍵
不過我自己的使用習慣上,從來沒有使用過外來鍵,所以就放個外部連結給各位參考拉
--------------------------------------------------------------
會有這麼多東西,主要還是因為也不可能每次產生資料表之後,再進去資料庫去處理欄位屬性,會非常的麻煩
那要如何處理呢,就是這些attribute來處理了
另外值得一提的是,每種資料庫都不太一樣
雖然使用上都差不多,不過最大差異應該還是TypeName與預設Schema
使用的時候要多注意一下
另外還有個default的部分比較麻煩,我在這邊貼個 overflow的文章給各位參考
Entity Framework 6 Code first Default value
參考資料:
Entity Framework Code First Data Annotations
Code First Conventions
沒有留言:
張貼留言