东南长平.宜福德.艺宝.中雷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 541|回复: 0

如何使用EF4.3构造一个清爽的基于POCO的ORM架构?

[复制链接]

73

主题

74

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
Tryst丶影子 发表于 2018-2-16 12:03:41 | 显示全部楼层 |阅读模式
EF正在成为一个优秀的ORM框架,4.1中就加入了Code First,当时带来的不少的惊喜,可是,4.1时,的Code First虽然可以不再依赖edmx,可是建立很多的,映射code,虽然这些code有工具可以自动生成,可是仍觉得解决方案混乱。今天感受了一下4.3,他可以不在依赖edmx,不再需要大量的映射code,写简单的,连接字符串,实现一个清爽的,基于POCO的ORM架构。4.3中好多东西都已被内部封装了我们只需简单的调用就好:
1,定义数据操作对象
[url=][/url]
    /// <summary>
   
/// 定义一个DbContext
   
/// </summary>
    public class BookContext : DbContext
    {
        public BookContext()
            : base("conString")
        {

        }
        //定义一个DbSet对象映射到实体
        public DbSet<Book> Books
        {
            get;
            set;
        }
    }
[url=][/url]

2,定义实体对象
[url=][/url]
    //定义一个实体
    public class Book
    {
        public int BookId { get; set; }
        public string Title { get; set; }
        public double Price { get; set; }
    }
[url=][/url]

3,修改配置文件,添加一个简单的连接字符串
  <connectionStrings>
    <add name="conString" connectionString="server=.;uid=sa;pwd=123456;database=promise" providerName="System.Data.SqlClient"/>
  </connectionStrings>

4,Test
[url=][/url]
            using (BookContext bc = new BookContext())
            {
                //查询
                var list = bc.Set<Book>().ToList();
                //添加
                var obj = new Book() { BookId = 12, Price = 10.1, Title = "其实我是一本书" };
                bc.Books.Add(obj);
                //提交
                bc.SaveChanges();
            }
[url=][/url]

另外4.3中加入了对System.ComponentModel.DataAnnotations的扩展,只需在实体对象类或字段上加入相应的标记就可以定义或改变一些映射规则,如:
[url=][/url]
    //指定映射到数据库的Books表中
    [System.ComponentModel.DataAnnotations.Table("Books")]
    public class Book
    {
        //指定该为主键
        [System.ComponentModel.DataAnnotations.Key()]
        //指定该字段不为自动编号
        [System.ComponentModel.DataAnnotations.DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]
        public int BookId { get; set; }
        public string Title { get; set; }
        public double Price { get; set; }
    }
[url=][/url]

如果你数据中book对应的表主键不是自动编号的此标记[System.ComponentModel.DataAnnotations.DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]
很重要否则无法update数据,另外其中还有大量的 验证属性。
附上一个tt代码生成器,用于从数据库中初始化实体,VS2010中可以通过NuGet获取EF最新版本:Install-Package EntityFramework。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|Championly Tec. 站长统计

GMT+8, 2020-1-27 13:39 , Processed in 0.304227 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表