ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构
2017-10-13 14:17
423 查看
大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型、长度、是否为空、主外键、索引以及表与表之间的关系。但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在My Blog中并没有对它们之间进行过任何的配置,My Blog可以使用已有的数据库运行,在后续为Post类型添加新属性时,新属性也能够正确的添加到数据库表中,以下是MySQL的数据库表结构:
View Code
在依赖的类型中建议添加一个外键属性,以下几种写法会被认为是外键属性(大小写不敏感):
○ 导航属性名称+主表主键名称
○ 主类名称+主键名称
○ 主表主键名称
注:如果外键属性是不可为空类型,那么EF会建立一个关联删除,当主键记录被删除时,关联的外键记录也会被删除。
如果“导航属性”的类型中不存在主键,那么会被认为是一个复杂类型。
更多参考文档:
https://msdn.microsoft.com/en-us/library/jj679962(v=vs.113).aspx
https://msdn.microsoft.com/library/system.data.entity.modelconfiguration.conventions.aspx
本系列文章以Code First为主,所以对于实体与数据库之间关系的映射也将使用代码的方式通过Fluent API来介绍。
Code First Fluent API一般是继承DbContext并重写OnModelCreating方法,在OnModelCreating方法中通过modelBuilder来配置对应的实体信息:
● 添加主键:
● 设置列属性:
● 创建索引(EF6.1版本支持)
更多设置参考:https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx
使用Fluent API处理关系参考:https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113).aspx
关于如何使用特性来修改属性和关系可参考文档:https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx
参考:
https://msdn.microsoft.com/en-us/library/jj679962(v=vs.113).aspx
https://msdn.microsoft.com/library/system.data.entity.modelconfiguration.conventions.aspx
https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx
https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113).aspx
本文地址:http://www.cnblogs.com/selimsong/p/7656674.html
ASP.NET没有魔法——目录
public class Department { // 主键 public int DepartmentID { get; set; } public string Name { get; set; } // 导航属性 public virtual ICollection<Course> Courses { get; set; } } public class Course { // 主键 public int CourseID { get; set; } public string Title { get; set; } public int Credits { get; set; } // 外键(主表主键名称) public int DepartmentID { get; set; } // 导航属性 public virtual Department Department { get; set; } }
View Code
在依赖的类型中建议添加一个外键属性,以下几种写法会被认为是外键属性(大小写不敏感):
○ 导航属性名称+主表主键名称
○ 主类名称+主键名称
○ 主表主键名称
注:如果外键属性是不可为空类型,那么EF会建立一个关联删除,当主键记录被删除时,关联的外键记录也会被删除。
如果“导航属性”的类型中不存在主键,那么会被认为是一个复杂类型。
更多参考文档:
https://msdn.microsoft.com/en-us/library/jj679962(v=vs.113).aspx
https://msdn.microsoft.com/library/system.data.entity.modelconfiguration.conventions.aspx
通过Fluent API来修改属性和关系
除了默认的约定外还可以使用特性在对应的实体属性上面标记和通过EF的Fluent API来进行配置实现关系、属性的修改。本系列文章以Code First为主,所以对于实体与数据库之间关系的映射也将使用代码的方式通过Fluent API来介绍。
Code First Fluent API一般是继承DbContext并重写OnModelCreating方法,在OnModelCreating方法中通过modelBuilder来配置对应的实体信息:
● 添加主键:
● 设置列属性:
● 创建索引(EF6.1版本支持)
更多设置参考:https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx
使用Fluent API处理关系参考:https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113).aspx
使用数据特性标记修改属性和关系
除了使用Fluent API来修改实体与数据库表的映射外,还可以使用数据特性标记的方式实现对类型与数据库表之间的关系和字段属性,但是这样做会对实体代码有入侵,实体代码应该是干净的与EF和数据库属性无关的。关于如何使用特性来修改属性和关系可参考文档:https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx
小结
本章介绍了实体与数据库结构之间的关系如何处理,并对主要API进行了介绍,但由于目前My Blog中数据库结构比较简单无法完全演示,所以更多使用方法可以参考微软文档。参考:
https://msdn.microsoft.com/en-us/library/jj679962(v=vs.113).aspx
https://msdn.microsoft.com/library/system.data.entity.modelconfiguration.conventions.aspx
https://msdn.microsoft.com/en-us/library/jj591617(v=vs.113).aspx
https://msdn.microsoft.com/en-us/library/jj591620(v=vs.113).aspx
本文地址:http://www.cnblogs.com/selimsong/p/7656674.html
ASP.NET没有魔法——目录
相关文章推荐
- ASP.NET没有魔法——ASP.NET MVC 与数据库之MySQL&EF
- ASP.NET没有魔法——ASP.NET MVC 与数据库之EntityFramework配置与连接字符串
- ASP.NET没有魔法——ASP.NET MVC 与数据库之Entity Framework Migrations
- ASP.NET没有魔法——ASP.NET MVC 与数据库大集合
- ASP.NET没有魔法——ASP.NET MVC 与数据库之MySQL
- ASP.NET没有魔法——ASP.NET MVC 与数据库之ORM
- ASP.NET没有魔法——ASP.NET MVC 路由的匹配与处理
- ASP.NET没有魔法——ASP.NET MVC 模型绑定
- asp.net mvc 3.0详细笔记__09__创建数据库,应用EF连接模型类和数据表
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计
- ASP.NET没有魔法——ASP.NET MVC & 分层 代码篇
- ASP.NET没有魔法——ASP.NET MVC IoC
- ASP.NET没有魔法——ASP.NET MVC Controller的实例化与执行
- asp.net mvc EF修改指定数据库列的数据
- ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
- 关于在ASP.NET MVC 中使用EF的Code First的方式来读取数据库时的Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
- ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)
- ASP.NET没有魔法——ASP.NET MVC IoC
- ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证
- ASP.NET MVC EF 02 数据库访问层的设计