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

感谢你的阅读:

本集代码下载:http://pan.baidu.com/s/1gdlgRbP

时间: 2024-08-28 02:55:10

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

EntityFramework 5.0 CodeFirst 教程02-删除和修改/架构改变异常的处理

-----------------------------------------------------目录----------------------------------------------------- EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手 (2015-07-13 10:48) EntityFramework 5.0 CodeFirst 教程02-删除和修改/架构改变异常的处理 (2015-07-14 17:50) -------

EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手

----------------------------目录------------------------------ EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手 ----------------------------目录------------------------------ 网上关于EntityFramework 5.0的教程很多,但是大多数都是代码整理不清晰,有些甚至是拷贝,代码丢失等问题,本人最近也有一个项目是用到EntityFram

Angular系列---- AngularJS入门教程03:AngularJS 模板(转载)

是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点.考虑到这一点,我们用AngularJS来为我们的应用添加一些模型.视图和控制器. 请重置工作目录: git checkout -f step-2 我们的应用现在有了一个包含三部手机的列表. 步骤1和步骤2之间最重要的不同在下面列出.,你可以到GitHub去看完整的差别. 视图

Spring Boot 2.0.2 教程 - 目录

Spring Boot 2.0.2 教程 - Hello World - 01 Spring Boot 2.0.2 教程 - Hello World 之 intellij idea 创建web项目 - 02 Spring Boot 2.0.2 教程 - 配置文件application.properties - 03 Spring Boot 2.0.2 教程 - 日志管理 - 04 Spring Boot 2.0.2 教程 - 集成jsp和静态资源css,js,image的访问 - 05 Spri

Windows环境下Android Studio v1.0安装教程

Windows环境下Android Studio v1.0安装教程 Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SDK) (813 MB) exe(不包含SDK) (250 MB) zip (235 MB) Mac dmg (234 MB) zip (233 MB) Linux: zip (233 MB) 说明: 32位系统和64位系统是同一个安

使用EntityFrameWork 5.0增删查改(&amp;分页,连表)

   EntityFrameWork 5.0的简单使用 概要: 使用EF增加,删除,编辑以及查询,分页,连表等等 正文: 在项目中添加一下Entiy Data Model: xx.context.tt下的xx.context.cs: 这里的OrderSystemEntities(OrderSystem是数据库名)就是EF的上下文容器对象,继承至DbContext 在OrderSystemEntities中调用DbContext的构造函数DbContext(string connectionNam

【转】Windows环境下Android Studio v1.0安装教程

原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/158-androidstudio-v1-0-win-install Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包.要求:JDK 7以及以上版本. Android Studio安装文件. Windows:exe(包含SDK) (813 MB)exe(不包含

Yii Framework2.0开发教程(8)输入验证

validate() 方法,在幕后为执行验证操作.先看一个简单的例子,例子的代码在<Yii Framework2.0开发教程(2)使用表单Form>. 类ZhyoulunController中函数actionEntry() ,其中有一句$model->validate(),就是来判断输入的名字和电子邮件是否正确. 修改models/EntryForm.php <?php namespace app\models; use yii\base\Model; class EntryFor

Cocos2d-x 3.0 实例学习教程 前沿

前一段时间学过cocos2d-x  2.x ,后来去做了一些别的项目.最近又想开发自己的游戏了,可是cocos2d-x 已经升级到3.0 ,好多API都变了.所以决定再把cocos2d-x学一遍,一是加深理解,二是熟悉一下3.0的新接口. 我感觉学习3.0最好的办法是学习官方给出的实例,如果在网上搜索学习的话,会出现很多不同的答案,而且版本cocos2d-x beta版和3.0版还有很多不同. 接下来的教程是对官方实例的分析以及根据实例创建自己的小实例. Cocos2d-x 3.0 实例学习教程