EF数据注解

添加System.ComponentModel.DataAnnotations命名空间的using语句

EF 支持的完整注释列表为:


Key/ForeignKey


Key

场景一:
Instructor实体和OfficeAssignment实体之间有“一对零”或“一对一”的关系。办公室只和讲师之间存在关系,因此其主键也是其Instructor实体的外键。但是实体框架不会自动将InstructorID识别为实体的主键,因为该命名不遵循实体框架约定。因此,我们使用Key特性来标记该属性为实体的主键。
场景二:
如果实体没有它自己的主键,但您想将属性名命名为类名-ID或ID以外的不同的名称,您同样可以使用Key特性。默认情况下实体框架将键视为非数据库生成的,因为该列用来标识关系。

ForeignKey

当两个实体之间存在有“一对零”或“一对一”关系时,实体框架无法自动辨认出那一端的关系是主体,那一端是依赖。一对一关系在每个类中使用导航属性来引用其他类。
ForeignKey特性可以应用于要建立关系的依赖类。
如果您省略ForeignKey特性,当您尝试创建迁移时系统会出现一个无法确定实体间关系的错误。

示例:

复制代码
 1 using System.ComponentModel.DataAnnotations;
 2 using System.ComponentModel.DataAnnotations.Schema;
 3 
 4 namespace ContosoUniversity.Models
 5 {
 6     public class OfficeAssignment
 7     {
 8         [Key]
 9         [ForeignKey("Instructor")]
10         public int InstructorID { get; set; }
11         public string Location { get; set; }
12         public virtual Instructor Instructor { get; set; }
13     }
14 }
复制代码

 

复制代码
1 public class Instructor
2 {
3    public int ID { get; set; }
4    public string LastName { get; set; }
5    public string FirstMidName { get; set; }
6    public DateTime HireDate { get; set; }
7    public virtual ICollection<Course> Courses { get; set; }
8    public virtual OfficeAssignment OfficeAssignment { get; set; }
9 }
复制代码

 

导航属性:

Instructor实体有一个可为空的OfficeAssignment导航属性(因为可能有讲师没有分配办公室),
并且OfficeAssignment实体有一个不可为空的Instuctor导航属性(因为一个办公室不可能在没有讲师的情况下分配出去--InstructorID是不可为空的)。
当Instructor实体具有OfficeAssignment实体关联的时候,每个实体在导航属性中都会有另一个实体的引用
您可以把一个Required特性添加给Instructor导航属性来指明必须有相关的讲师,但您不需要这样做。因为InstructorId外键(同样也是表的主键)是不可为null的。

外键属性:

课程实体有一个DepartmentID外键属性,用来指向相关的Department实体,它有一个Department导航属性。当一个关联实体有一个导航属性时,实体框架不需要您添加外键属性到您的实体模型,实体框架在需要时会在数据库中自动创建外键。但在实体模型中拥有一个外键会让更新更简单、高效。例如,当您读取一个Course实体进行编辑,如果您选择不加载Department实体,那Department实体是空的。所以当您更新Course实体时,您必须先取得该实体关联的Department实体。如果在数据模型中包含了外键DepartmentID,您就不需要在更新前先取得Department实体。

 

 

DataType


示例:

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.ComponentModel.DataAnnotations;
 6 
 7 namespace ContosoUniversity.Models
 8 {
 9     public class Student
10     {
11         public int ID { get; set; }
12         public string LastName { get; set; }
13         public string FirstMidName { get; set; }
14         [DataType(DataType.Date)]
15         [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
16         public DateTime EnrollmentDate { get; set; }
17 
18         public virtual ICollection<Enrollment> Enrollments { get; set; }
19     }
20 }
复制代码

DataType枚举

https://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.datatype%28v=vs.110%29.aspx

成员名称
描述
CreditCard
表示信用卡号码。
Currency
表示货币值。
Custom
表示自定义的数据类型。
Date
表示日期值。
DateTime
表示某个具体时间,以日期和当天的时间表示。
Duration
表示对象存在的一段连续时间。
EmailAddress
表示电子邮件地址。
Html
表示一个 HTML 文件。
ImageUrl
表示图像的 URL。
MultilineText
表示多行文本。
Password
表示密码值。
PhoneNumber
表示电话号码值。
PostalCode
表示邮政代码。
Text
表示所显示的文本。
Time
表示时间值。
Upload
表示文件上载数据类型。
Url
表示 URL 值。
posted @ 2020-07-16 16:03  Linybo2008  阅读(540)  评论(0编辑  收藏  举报