#ORM工具对接示例(EntityFramework6)

Entity Framework 6(EF6)是microsoft的.NET对象关系映射器(O/RM),详情请参考Entity Framework 6概述 (opens new window)

# 版本支持

.Net Framework Entity Framework
net45
net451
net452
net6.0
6.4.0

# 运行环境

支持在Linux和Windows系统下运行。

# 运行依赖

ADO.NET驱动(Yashandb.Data.YashandbClient.dll),安装步骤请查阅安装YashanDB ADO.NET驱动

# 安装Entity Framework 6(EF6)框架

  1. 参考YashanDB软件包清单获取YashanDB ADO.NET驱动安装包yashandb-dotnet-版本号.zip。

  2. 将压缩包下载并解压到本地路径,找到/path/Yashandb.Data.EntityFramework。

  3. 编辑应用程序项目,将Yashandb.Data.EntityFramework项目引用到该项目。

    对于在Visual Studio开发的应用程序

    1. 打开应用程序项目Examples,单击【文件 > 添加 > 现有项目】,单击Yashandb.Data.EntityFramework所在路径,选择Yashandb.Data.EntityFramework.csproj文件,将Yashandb.Data.EntityFramework加入到应用所在解决方案内。

      添加项目

    2. 右键单击Examples应用程序项目,依次选择【添加 > 项目引用 > 项目】,勾选Yashandb.Data.EntityFramework选项。

      项目引用

      项目勾选

    对于在命令行开发的.NET应用程序(以Linux环境为例)

    1. 进入Examples应用程序项目所在文件夹,通过dotnet命令将Yashandb.Data.EntityFramework项目添加到该应用程序项目内。

      dotnet add reference /path/Yashandb.Data.EntityFramework/Yashandb.Data.EntityFramework.csproj
      

    完成项目引用后,该应用程序即可进行对YashanDB数据库的访问操作。

# 使用方法

  1. 注册YashanDB的Provider。

    方法一:在App.config中添加配置。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <entityFramework>
            <defaultConnectionFactory
                    type="Yashandb.Data.EntityFramework.YasdbConnectionFactory, Yashandb.Data.EntityFramework"/>
            <providers>
                <provider invariantName="Yashandb.Data.EntityFramework"
                    type="Yashandb.Data.EntityFramework.YasdbProviderServices, Yashandb.Data.EntityFramework"/>
            </providers>
        </entityFramework>
    </configuration>
    

    方法二:在定义DbContext时使用属性注入DbConfigurationType(typeof(YasdbEFConfiguration))

    [DbConfigurationType(typeof(YasdbEFConfiguration))]
    public class DefaultContext : DbContext
    {
        public DefaultContext (string connStr) : base(connStr)
        {
            Database.SetInitializer<DefaultContext>(null);
        }
        public DbSet<Comp> Comps { get; set; }
    }
    
  2. 使用Entity Framework 6。

    public class Program
    {
        static void Main(string[] args)
        {
            using ( DefaultContext ctx = new DefaultContext("name=YasdbContext") )
            {
                ctx.Database.Delete();
                ctx.Database.CreateIfNotExists();
                Comp c = new Comp { Name = "aa", DateBegan = DateTime.Now, NumEmployees = 10 };
                ctx.Comps.Add(c);
                ctx.SaveChanges();
                foreach ( Comp val in ctx.Comps )
                {
                    Console.WriteLine(val.Name);
                }
            }
        }
        
        public class Comp
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }
            public string Name { get; set; }
            public DateTime DateBegan { get; set; }
            public int NumEmployees { get; set; }
        }
    
        [DbConfigurationType(typeof(YasdbEFConfiguration))]
        public class DefaultContext : DbContext
        {
            public DefaultContext (string connStr) : base(connStr)
            {
                Database.SetInitializer<DefaultContext>(null);
            }
    
            public DbSet<Comp> Comps { get; set; }
        }
    }
    

# 规格限制

实体模型不支持的成员类型:

类型 说明
TimeSpan 时间间隔类型
DateTimeOffset 带时区的时间类型
Geometry 地理信息类型
Geography 地理信息类型