zoukankan      html  css  js  c++  java
  • Entity Framework Code First(概要)

    EF开源项目地址:https://github.com/aspnet/EntityFramework6

    MSDN :https://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx

     中文:https://msdn.microsoft.com/zh-cn/library/bb399567(v=vs.110).aspx

    开始EF

    1、安装EF 

        新建类库项目,打开程序包控制台安装EF

    PM>Install-Package EntityFramework

    2、配置数据库连接    成功后会在类库项目下自动生成app.config和packages.config(该项目所有包清单),重点看项目配置app.config。给connectionStrings节点添加一个连接

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <connectionStrings>
        <add name="Practice" connectionString="Data Source=(localdb)ProjectsV13;Initial Catalog=Practice.Sample;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient" />
      </connectionStrings>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="mssqllocaldb" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
    </configuration>
    app.config

    DbContext

     1 public class PracticeEntitys : DbContext
     2     {
     3         public PracticeEntitys()
     4             : base("Name=Practice")
     5         {
     6 
     7         }
     8 
     9         public new Database Database
    10         {
    11             get { return base.Database; }
    12         }
    13 
    14 
    15     }

     DataAnnotation

    Table:[ Table("自定义table名")]

    Column:[Column("列名",TypeName="varchar")]

    Key:设置自定主键,如果不指定该属性,则默认寻找带ID的字段设为主键

    DatabaseGenerated表示数据库自动生成,该属性传参数DatabaseGeneratedOption.枚举:Identity:自增长 None:不处理 Computed:表示这一列是计算列

    Required:不可为空

    NoMapped:不映射某字段加该属性

    MaxLength(int)、MinLength(int):设置最大最小长度

    ForeignKey("指定列名")和virtual的字段连用设置外键

    Index:索引

    ComplexType:复杂类型:如可以在下面的commonDate类上加该特性。当然这里推荐使用继承

    并发控制:

    Timespan和ConcurrentCheck,效果都是一样,原理都是比较当前更新的实体和原数据实体的 对应标识了并发的字段是否一致,不一致就抛出异常

    [Table("article")]
        public class Article: CommonDate
        {
            [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
            public int Id { get; set; }
            public string Title { get; set; }
    
            public Int64 Click { get; set; }
    
        }
    
    
        public class CommonDate
        {
            public DateTime CreateDate { get; set; }
            public DateTime ModifyDate { get; set; }
        }

    迁移 Migration

    1、开启迁移

    PM>Enable-Migrations

    可选参数:

    -EnableAutomaticMigrations:开启自动迁移。开启后configuration.cs会设置自动迁移为true,那么这么做实现什么效果呢?不开启状态下我们需要add-migration 然后update迁移到数据库,并生成对应的Migration结构文件;如果开启自动迁移,那么可以省去add的步骤直接update更新到数据库,但是这样也不会生成Migration的结构文件。结果显而易见正常生产环境不建议开启,一般我这里会设置为false。

    public Configuration()
            {
                AutomaticMigrationsEnabled = true;
            }

    -ContextTypeName 全限定名:如果一个项目多个Context,用该参数指定

    -StartUpProjectName:使用项目,和手动在程序包控制台选择使用项目一样效果

    -Force:强制

    关于错误:找不到配置字符串

    (1)、检查配置文件的名称是否和Dbcontext子类设置的名字一样

    (2)、确认字符串的情况下如果还报错,先把类库设置为启动项目

    2、添加迁移,自定义命名initdatabase,EF会自动根据上面继承DbContext的类的变化和约定的变化,生成Flut的cs文件到Migration文件夹里,并且会自动加上时间戳。如:时间_自定义名.cs

    PM>add-migration initdatabase

    3、更新到数据库;执行完上面的语句,数据库仍然是不会变化,接下来把表结构更新到数据库

    PM>update-database -verbose

    4、批量生成脚本

    注意:批量生成的时候注意是按照上面 2里面自动添加的 时间顺序执行的。

    PM>Update-Database -Script -SourceMigration:开始Migration.cs -TargetMigration: 结束Migration.cs

     可以只指定target参数进行回溯

    5、迁移检查

    public TestDbContext() : base("name=Default")
    {
    //不会创建数据库,生产环境建议用这个设置,表通过sql来创建或修改
    Database.SetInitializer<TestDbContext>(null);
     
    // 数据库不存在时重新创建数据库,会删除主项目或其他插件的表
    Database.SetInitializer<TestDbContext>(new CreateDatabaseIfNotExists<TestDbContext>());
                 
     
    //每次启动应用程序时创建数据库,会删除主项目或其他插件的表
    Database.SetInitializer<TestDbContext>(new DropCreateDatabaseAlways<TestDbContext>());
                 
    //模型更改时重新创建数据库,会删除主项目或其他插件的表
    Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChanges<TestDbContext>());
    }

     Fluent API

    见上篇:http://www.cnblogs.com/xmai/p/3919494.html

  • 相关阅读:
    Key-Value Memory Network
    Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Clas
    Deep Memory Network在Aspect Based Sentiment方向上的应用
    Deep Memory Network 深度记忆网络
    Self Attention 自注意力机制
    Attention基本公式及其变种
    *端策略优化算法(PPO)
    Policy Gradient 算法
    一本通 农场派对
    A
  • 原文地址:https://www.cnblogs.com/xmai/p/6744950.html
Copyright © 2011-2022 走看看