ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2619字,纯文字阅读大概需要4分钟。
内容图文
![ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构](/upload/InfoBanner/zyjiaocheng/1148/a56f95cb68d7460e9c146a1c3fa6d44b.jpg)
大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型、长度、是否为空、主外键、索引以及表与表之间的关系。但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在My Blog中并没有对它们之间进行过任何的配置,My Blog可以使用已有的数据库运行,在后续为Post类型添加新属性时,新属性也能够正确的添加到数据库表中,以下是MySQL的数据库表结构:
其中IsPublish和ClickCount是后续通过EF Mirgations添加的。下图的表是直接通过EF根据Post类创建的,可以看出它们部分数据类型是不一样的,自己创建的数据库Title等字段用的是varchar而EF创建的是longtext:
关于EF code first约定
约定(Conventions)是一个在使用EF Code First时根据实体类型自动配置一个“概念模型”的规则集合,这里的“概念模型”就可以理解为数据库表模型。它们位于System.Data.Entity.ModelConfiguration.Conventions 命名空间。以下是一些常用的约定:
● 关于ID的约定(主键约定):类型中以ID命名的或者命名以ID结尾的,如ID或PostID。如果类型为数字或者GUID那么将会被认为是Identity列。
● 关于类关系的约定(表之间的外键约定):使用导航属性(既该属性是另一个实体类型)来判断类与类之间的一对一、一对多和多对多关系。
以下是微软文档例子:
![技术分享](/upload/getfiles/default/2022/11/4/20221104023840819.jpg)
![技术分享](/upload/getfiles/default/2022/11/4/20221104023841177.jpg)
1 public class Department 2 { 3 // 主键 4 public int DepartmentID { get; set; } 5publicstring Name { get; set; } 6 7// 导航属性 8publicvirtual ICollection<Course> Courses { get; set; } 9} 1011publicclass Course 12{ 13// 主键 14publicint CourseID { get; set; } 1516publicstring Title { get; set; } 17publicint Credits { get; set; } 1819// 外键(主表主键名称) 20publicint DepartmentID { get; set; } 2122// 导航属性 23publicvirtual Department Department { get; set; } 24 }
在依赖的类型中建议添加一个外键属性,以下几种写法会被认为是外键属性(大小写不敏感):
○ 导航属性名称+主表主键名称
○ 主类名称+主键名称
○ 主表主键名称
注:如果外键属性是不可为空类型,那么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
原文:http://www.cnblogs.com/selimsong/p/7656674.html
内容总结
以上是互联网集市为您收集整理的ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构全部内容,希望文章能够帮你解决ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。