CodeFirst通过分析我们在代码里编写的类,以及类之间的关系生成数据库表,以及表之间的各种关系。数据库的表会涉及到主键,外键,列是否为空,列类型等等。 我们要通过怎样的方式来暴露这些信息呢?

 
CodeFirst通过DataAnnotations(在 System.ComponentModel.DataAnnotations 命名空间中 )特性类标示这些信息。

常用的一些标识如下 

主键

    如果不存在符合EF默认规则的主键时,用key标注也可。个人不赞成这样,遵守默认规则就好,免去不必要麻烦。
    public class Category
{
[ Key ]
public string TrackingKey { get; set; }
public string CategoryName { get; set; }
public string BlogID { get; set; }
}

自增长

如果主键是int类型,EF为默认设置为增长。但如果是GUID类型,则要手动的设置自增长
   public class User
{
[Key ,DatabaseGenerated (DatabaseGeneratedOption .Identity)]
public Guid UserGuid { get; set; }
public string UserName { get; set; }
}
查看数据表的创建脚本,我们会发现多了这样的一句话
ALTER TABLE [dbo]. [Users] ADD   DEFAULT ( newsequentialid ()) FOR[UserGuid]

必需 MaxLength 和 MinLength

    public class Category
{
[ Key ]
public string TrackingKey { get; set; }
[ Required ][MaxLength (), MinLength()]
public string CategoryName { get; set; }
public string BlogID { get; set; }
public string Description { get; set; }
}

NotMapped

Code First 约定指示具有受支持数据类型的每个属性都要在数据库中有表示。但在您的应用程序中并不总是如此。例如,您可以在 Blog 类中使用一个属性来基于 Title 和 BloggerName 字段创建代码。该属性可以动态创建,无需存储。您可以使用 NotMapped 注释来标记不映射到数据库的所有属性。
并且这个标示还可以用于对整个类进行标示,那这个类也就不会被映射了。
 

ComplexType

 BlogDetails 作为 Blog 类中的一个属性,将作为 Blog 对象的一部分被跟踪。为了让 Code First 认识到这一点,必须将 BlogDetails 类标记为 ComplexType。
 
     public class Blog
{
public string ID { get; set; }
public string BlogName { get; set; }
public string BlogAuthor { get; set; }
public virtual List < Post> Posts { get ; set ; } //导航属性
public BlogDetails Detail { get; set; }
} [ ComplexType]
public class BlogDetails
{
public string BlogDescription { get; set; }
public string CreateTime { get; set; }
}

但是运行的时候却报错,提示Detail属性,不可以为空 。原来,虽然复杂类型的每个属性都可以为空,但当作为复杂属性出现时,却是不可以为空的,必须初始化!
需要修改如下
修改之后运行如下
会发现 复杂类型将自己的属性并入了所属类型,并以复杂类型名+属性名作为新列名
 
数据注释就到这里。喜欢欢迎推荐!
 

最新文章

  1. StringUtils工具类
  2. spring @Scheduled注解执行定时任务
  3. ubuntu下cacti安装配置
  4. C#程序
  5. 有关RDS上只读实例延时分析-同适用于自建MySQL主从延时分析判断
  6. Lighttpd
  7. 如何给magento的产品页面添加返回按钮
  8. 介绍linux下Source Insight强大代码编辑器sublime_text_3
  9. Redis从入门到精通:中级篇
  10. [物理学与PDEs]第2章第5节 一维流体力学方程组的 Lagrange 形式 5.2 Lagrange 坐标
  11. class 关键字
  12. HQL数据查询基础
  13. 《深入分析Linux内核源代码》读书、私藏笔记大放送
  14. 20135323符运锦期中总结----Linux系统的理解及学习心得
  15. 撩课-Web大前端每天5道面试题-Day32
  16. maven打包 jar
  17. cogs 444. [HAOI2010]软件安装
  18. [webpack] Webpack &#21035;&#21517;
  19. 将Gradle项目公布到maven仓库
  20. ogg的安装配置 配置双向同步(含DDL)

热门文章

  1. Python 基础之class魔术方法
  2. iOS开发之Todo List for Swift项目
  3. centos docker 安装笔记
  4. 并发上下文控制包Context
  5. (转)通过 Javacore 诊断线程挂起等性能问题
  6. java接口应用—策略设计模式
  7. c++之菱形继承问题
  8. JavaScript -- Window-Focus
  9. [Python 从入门到放弃] 4. 什么是可选参数
  10. linux 文件句柄数查看命令