码迷,mamicode.com
首页 > 其他好文 > 详细

EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性

时间:2015-07-22 18:24:52      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

---------------------目录--------------------------

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; }
    }

 

感谢你的阅读:
本集代码下载:http://pan.baidu.com/s/1gdlgRbP

EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性

标签:

原文地址:http://www.cnblogs.com/maijin/p/4668070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!