Create a complex data model - ASP.NET MVC with EF Core
Customize the Data Model
可以使用 Attributes 來建立自己想要的 Model
- DataType
DataType 跟 SQL 的 Data Type 類似, 但是會比 SQL 的 Data Type 有更多種選擇, 在 EF 裡面, 如果有 email 的 input 可以指定 data type 是
DataType.EmailAddress
, 如果只想要日期不要時間, 可以使用 DataType.Date
- DisplayFormat
想要在 View 上呈現的 format 是甚麼, 例如
- StringLength
指定 string 最長的長度, database 跟 MVC project 都會被套用
- RegularExpression
如果想要消除空白, 那麼可以使用 Regular Expression
- MaxLength
沒有 Client side 的 validation, 指定最大的長度
- Column
1.當 table 的名字跟 model class 不一樣時, 可以使用 Column, [Column(“”)] 裡面裝的會是 table 的名字
2.可以使用 Column 指定 SqlServer 的 data type
[Column(TypeName="money")]
public decimal Budget { get; set; }
- Required
Required 必須要和 MinimumLength 一起做搭配才會有作用
- Display
顯示在 View 的名字
當做完 update 的時候, 要打
migrations add <migration-name>
然後 dotnet ef database update
Navigation Property : 跟不同的 table 的關係的 property
一對多的關係
在官方文章上面, 一個 Instructor 可以教很多課, 所以 在 Instructor 的 table 裡面
CourseAssignments
可以是被定義成一個 collection一對一的關係
一個 Instructor 最多只能有 1 個 office,
- Key
別的 table 的 primary key, 不是 db 裡面的 primary key, 目的只有辨別 column 的關係
- Foreign Key
在 EF 裡面, 並不一定要有 FK, 只要 FK 沒有出現 EF 就會幫他們產生一個叫做 shadow properties 的東西, 但是有 FK 在 fetch data 的效率會比較好
- DatabaseGenerated
可以產生 default value - Foreign key and Navigation Property
如果是 1 對 1, 只要有 foreign key column 和原本 typed 的 navigation property
如果是 1 對多, 要有 ICollection
如果是 1 對多, 要有 ICollection
- 可有可無
可以在 data type 的後面加上 ?
public int? InstructorID { get; set; }
public Instructor Administrator { get; set; }
- Many to Many join table with payload
payload 的意思是除了foreign key 以外, 這一個 table 還有其他的 property
- Join table without table (join table)
這一個跟之前所 create table 的規則是一樣的 - Join Entity Name
一般來說, 可以使用 table1 和 table2 的 name 加起來變成是 Join Entity Name, 但是通常這一種 join table 到後面就會有 payload 所產生, 所以最好給一個特定的名字
舉例 :
Books 跟 Customers 的 Join Entity Name 可以是 Rating, 因為一本書可以有很多個 rating, 一個 customer 可以寫很多個 rating
Instructor 跟 Course 的 Join Entity Name 可以是 CourseAssignment, 因為一個 Instructor 可以有很多個 assignment, 一個 course可以寫很多個 assignment
- Composite Key
通常都會在 join table 裡面, 因為 join table 會有 2 邊 table 的 foreign key, 所以每一個 row 都沒版法有 unique 的數字, 所以使用 Composite Key 就是把 2 邊的 foreign key 看成是一個很大的 key, 這樣就可以有 unique identifier 的功能, 前提是每一個 row 的 data 都要不一樣
在 EF 中想要使用 Composite Key 不能用 Attribute, 而是使用 fluent API, 畫紅線的地方是使用 Composite Key
留言
張貼留言