zoukankan      html  css  js  c++  java
  • Entity Framework的简单使用

    公司的项目在用EF,最近抽时间研究了下,整理了一个比较公用的EF框架,供大家一起分享下。

    EF这东东,用得好的话,确实方便了开发;用得不好的话,出了问题半天也找不出是什么原因。

    现在就先介绍EF的简单使用。主要分为以下5个项目

    EF.Core:数据实体

    EF.Data:C#实体跟数据表直接的映射

    EF.Service:数据服务

    EFFramework:公共类库

    EFSolution:测试项目

    DbContext是EF比较重要的类,我们的数据库访问对象都必须继承该类。下面就是我们要用到的数据上下文:

    public class EFObjectContext : DbContext, IDbContext
        {
            public EFObjectContext(string nameOrConnectionString)
                : base(nameOrConnectionString)
            {
                //((IObjectContextAdapter) this).ObjectContext.ContextOptions.LazyLoadingEnabled = true;
            }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                //dynamically load all configuration
                //System.Type configType = typeof(LanguageMap);   //any of your configuration classes here
                //var typesToRegister = Assembly.GetAssembly(configType).GetTypes()
    
                string[] MapPath = { "EF.Data.dll" };
    
                foreach (var path in MapPath)
                {
                    var asm = Assembly.LoadFrom(path);
                    var typesToRegister = asm.GetTypes()
                    .Where(type => !String.IsNullOrEmpty(type.Namespace))
                    .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
    
                    foreach (var type in typesToRegister)
                    {
                        dynamic configurationInstance = Activator.CreateInstance(type);
                        modelBuilder.Configurations.Add(configurationInstance);
                    }
                }
    
                //...or do it manually below. For example,
                //modelBuilder.Configurations.Add(new LanguageMap());
    
                base.OnModelCreating(modelBuilder);
            }
    }
    View Code

    OnModelCreating方法是应用程序在初始化时将实体跟数据表的映射加载到数据上下文。

    1、定义实体

        public class BlogUser:BaseEntity
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public string Address { get; set; }
        }
    View Code

    此处比较简单,不再废话。

    2、定义映射

    public partial class BlogUserMap : EntityTypeConfiguration<BlogUser>
        {
            public BlogUserMap()
            {
                this.ToTable("BlogUser");
                this.HasKey(c => c.Id);
            }
        }
    View Code

    定义实体跟数据表的映射,实体之间一对一、一对多、多对多的关系也在此处定义。

    3、定义数据服务

    public interface IBlogUserService
        {
            IList<BlogUser> GetAllBlogUser();
        }
    View Code
    public class BlogUserService : IBlogUserService
        {
            private readonly IRepository<BlogUser> _blogUserRepository;
            public BlogUserService(IRepository<BlogUser> blogUserRepository)
            {
                this._blogUserRepository = blogUserRepository;
            }
            public IList<BlogUser> GetAllBlogUser()
            {
                return _blogUserRepository.Table.ToList();
            }
        }
    View Code

    测试程序如下:

    static void Main(string[] args)
            {
                EngineContext.Initialize(false);
                Console.WriteLine("初始化完成");
    
                IBlogUserService service = EngineContext.Current.Resolve<IBlogUserService>();
    
                IList<BlogUser> users = service.GetAllBlogUser();
    
                Console.ReadKey();
            }
    View Code

    这就是EF的简单使用。

    源代码下载地址:http://pan.baidu.com/s/1mgJ57Ck

  • 相关阅读:
    IP fragmentation
    pci驱动
    cpu地址空间
    CentOS7 安装bazel
    kettle集群
    TextRankGloVe算法资料
    使用Kong Service负载均衡Load Balance功能
    自建ss服务器教程
    OpenSSL创建TLS/SSL证书
    监控告警
  • 原文地址:https://www.cnblogs.com/dengwenbo/p/4740522.html
Copyright © 2011-2022 走看看