EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性
---------------------目录--------------------------
EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性 (2015-07-22 17:30)
EntityFramework 5.0 CodeFirst 教程02-删除和修改/架构改变异常的处理 (2015-07-14 17:50)
EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手 (2015-07-13 10:48)
---------------------目录--------------------------
首先感谢大家的支持,最近比较忙,不过会抽时间讲完Code First的 谢谢大家的支持 想更多的学习资源,可以访问我的主页的,谢谢
这集我们来学习定义一个数据结构,首先看一下.NET类型和SQL类型的对应表,左侧是sql类型,右侧是.NET类型
1 配置简单属性
这里,我们继续使用Person这个类来配置属性,修改后代码如下:
public class Person { public int PersonId { get; set; } [MaxLength(30)] public string FirstName { get; set; } [MaxLength(30)] public string LastName { get; set; } [StringLength(1, MinimumLength = 1)] [Column(TypeName = "char")] public string MiddleName { get; set; } }
给每个属性添加了一些属性标注,
其中MaxLength(30)表示字段的最大长度为30,
StringLength表示最小长度和最大长度MinimumLength
[Column(TypeName = "char")] 表示该列属性是一个char类型
需要引用System.ComponentModel.DataAnnotations这个程序集
下面我们写下面的代码,然后执行
static void Main(string[] args) { //更多资料可以登录本人的主页:www.bamn.cn 欢迎大家 using (var personContext = new Context()) { //如果不存在数据库则创建 bool res = personContext.Database.CreateIfNotExists(); //往数据库中添加数据 var person = new Person { FirstName = "John", LastName = "Doe", MiddleName = "Mid" }; personContext.People.Add(person); personContext.SaveChanges(); //获取数据 var savedPeople = personContext.People; foreach (var p in savedPeople) { Console.WriteLine("Last name:{0},first name:{1},id {2},mid={3}", p.LastName, p.FirstName, p.PersonId,p.MiddleName); } } Console.ReadKey(); }
需要当我们晕写代码的时候,报下面的异常
“System.InvalidOperationException”类型的未经处理的异常在 EntityFramework.dll 中发生
其他信息: The model backing the 'Context' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
我们后面再来解决这个问题,下面先临时解决,首先我们先删除我们的数据库 就算以前连接的那个数据库EFDemo
删除后,我们再次运行
发现还是报下面的异常
“System.Data.Entity.Validation.DbEntityValidationException”类型的未经处理的异常在 EntityFramework.dll 中发生
其他信息: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
但是我们访问数据库的时候,发现我们的表已经创建了
这里要给大家说一下,就是,我们使用CODE FIRST 我们是不用实现创建好数据库的
这里大家要注意一下
然后我们发现,我们的数据库字段已经有相应的属性了,比如FirstName 是nvarchar 30的长度 然后middleName是char 一位
所以大家应该知道我们刚才报的错误是什么原因了
所以我们将上面的代码修改为
再次执行
代码成功执行
如果用户输入的名字超过30个字节,我们应该给个错误提示的
[MaxLength(30, ErrorMessage = "你的名超过了30个字节")] public string FirstName { get; set; }
这里的错误提示是支持国际化的,可以是其他的语言
本集所有代码:
class Program { static void Main(string[] args) { //更多资料可以登录本人的主页:www.bamn.cn 欢迎大家 using (var personContext = new Context()) { //如果不存在数据库则创建 bool res = personContext.Database.CreateIfNotExists(); //往数据库中添加数据 var person = new Person { FirstName = "John", LastName = "Doe", MiddleName = "M" }; personContext.People.Add(person); personContext.SaveChanges(); //获取数据 var savedPeople = personContext.People; foreach (var p in savedPeople) { Console.WriteLine("Last name:{0},first name:{1},id {2},mid={3}", p.LastName, p.FirstName, p.PersonId,p.MiddleName); } } Console.ReadKey(); } } public class Person { public int PersonId { get; set; } [MaxLength(30, ErrorMessage = "你的名超过了30个字节")] public string FirstName { get; set; } [MaxLength(30)] public string LastName { get; set; } [StringLength(1, MinimumLength = 1)] [Column(TypeName = "char")] public string MiddleName { get; set; } } public class Context : DbContext { public Context() : base("name=chapter2") { } public DbSet<Person> People { get; set; } }
感谢你的阅读: