博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework 4 第一篇 POCO
阅读量:6565 次
发布时间:2019-06-24

本文共 3594 字,大约阅读时间需要 11 分钟。

Entity Framework 4 第一篇 POCO

EFv1版本中,并没有提供对POCOPlain Old CLR Objects)的支持。目前,在.Net4.0 Beta2中的EF 4完善了很多。可以预见,正式的EF4版本应该会有很多改进和完善。在EF4中的提供了对POCO的支持。并支持的数据定义语言(DDL)。这样,我们可以不需要事先生成EDMX文件,而是通过代码编程来实现对数据的操作(Code Only)。

下面,介绍在EF4中利用POCO来实现数据定义操作。

0步:准备工作:

操作系统:Windows 7旗舰版

开发环境:VS2010 Beta2+SQL Server2008

1步:先建立需要的数据模型类。

例如:我们分别建立PersonCompany两个POCO数据模型,以便对应数据库中的PersonCompany表,代码如下:

///<summary>

    ///对应数据库中的Person

    ///</summary>

    public class Person

    {

        public string IdentityNo { getset; }

        public string Name { getset; }

        public int Age { getset; }

        public string Phone { getset; }

        public Company Company { getset; }

        public string Position { getset; }

 

    }

 

///<summary>

    ///对应数据库中的Company

    ///</summary>

    public class Company

    {

        public int CompanyId { getset; }

        public string CompanyName { getset; }

        public string Province { getset; }

        public string City { getset; }

        public string Address { getset; }

        public string HomePage { getset; }

        public string Phone { getset; }

    }

2步:创建上下文访问类

因为此时是没有EMDX文件的。所以,建立我们需要创建一个继承自ObjectContext的上下文访问类,用描述及访问我们之前定义的数据模型。代码如下:

public class POCOContext : ObjectContext

    {

        public POCOContext(EntityConnection conn) : base(conn) { }

        public ObjectSet<Person> Persons

        {

            get

            {

                return base.CreateObjectSet<Person>();

            }

        }

        public ObjectSet<Company> Companies

        {

            get

            {

                return base.CreateObjectSet<Company>();

            }

        }

    }

3步:代码实现

接着,我们就只需要通过创建一个POCOContext上下文,以便来完成我们的数据库操作就可以了。代码如下:

[TestMethod]

        public void TestMethod1()

        {

            //

            // TODO: Add test logic here

            //

            SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;user id=sa;PassWord=11111111;Initial Catalog=NewNorthwind");

            var builder = new ContextBuilder<POCOContext>();//创建上下文

            builder.Entity<Person>().HasKey(p => p.IdentityNo);//设置表的主键为IdentityNo字段

            builder.Entity<Company>().HasKey(c => c.CompanyId);//设置表的主键为CompanyId字段

            POCOContext context = builder.Create(con);

            if (!context.DatabaseExists())

                context.CreateDatabase();//创建数据库

          }

最后,运行上面的测试,就会自动创建一个名为NewNorthwind的数据库,并包含PersonCompany两张表。如下图所示:

 

EF4中,ObjectContext扩展更多的方法,如下:

public static class ObjectContextExtensions

    {

        public static void CreateDatabase(this ObjectContextcontext);

        public static string CreateDatabaseScript(thisObjectContext context);

        public static bool DatabaseExists(this ObjectContextcontext);

        public static void DeleteDatabase(this ObjectContextcontext);

    }

同时,EF4实体类也提供了更多的方法,如下:

public class EntityConfiguration<TEntity> :StructuralTypeConfiguration<TEntity>

    {

        public EntityConfiguration();

 

        public EntityConfiguration<TEntity> HasKey<TKey>(Expression<Func<TEntity, TKey>> getKey);

        public HierarchyEntityMapGenerator<TEntity> MapHierarchy();

        public EntityMap MapHierarchy(Expression<Func<TEntity,object>> propertyMap);

        public EntityMap MapSingleType(Expression<Func<TEntity,object>> propertyMap);

        public NavigationPropertyConfiguration<TEntity, TRelated> Relationship<TRelated>(Expression<Func<TEntity,ICollection<TRelated>>> propertyExpression);

        public NavigationPropertyConfiguration<TEntity, TRelated> Relationship<TRelated>(Expression<Func<TEntity, TRelated>> propertyExpression);

        public RelationshipPropertyConfiguration<TEntity, TRelated> RelationshipFrom<TRelated>(Expression<Func<TRelated,ICollection<TEntity>>> propertyExpression);

        public RelationshipPropertyConfiguration<TEntity, TRelated> RelationshipFrom<TRelated>(Expression<Func<TRelated, TEntity>> propertyExpression);

    }

这样,通过这些扩展的方法,我们可以只通过代码编程的方式(Code Only)对数据库以及数据库中各个表间的关系进行操作。

个人觉得,与.Net3.5 SP1中的EF v1版相比,的确是很大的改进,感觉越来越像NHibernate了。相信在未来正式发布的.Net4.0中,EF4应该会更加完善了。

 

 

 

    本文转自风车车  博客园博客,原文链接:http://www.cnblogs.com/xray2005/archive/2010/01/06/EF4.html,如需转载请自行联系原作者

你可能感兴趣的文章
阿里巴巴宣布开源限流降级中间件——Sentinel
查看>>
以OpenGL/ES视角介绍gfx-hal(Vulkan) Framebuffer接口使用
查看>>
我为什么选择使用容器?
查看>>
如何提高 Xcode 的编译速度
查看>>
杂篇-从整理文件发起的杂谈[-File-]
查看>>
【临实战】使用 Python 处理 Nginx 日志
查看>>
Python中最好用的命令行参数解析工具
查看>>
LeetCode14.最长公共前缀 JavaScript
查看>>
"Hotpatch"潜在的安全风险
查看>>
下载文件的15种方法
查看>>
CSS
查看>>
Netty源码解析1-Buffer
查看>>
动态网站的爬取
查看>>
小知识一、让Swift继续用OC#warning效果
查看>>
源码阅读:AFNetworking(八)——AFAutoPurgingImageCache
查看>>
数据库的基础知识
查看>>
vue全家桶 ---axios的使用和二次封装
查看>>
Idea 插件开发常用的方法
查看>>
闭包--其实很简单
查看>>
二级评论
查看>>