<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      samesite


      【步步為營 Entity Framework+Reporting service開發】-(2) Code First ,EF創建數據庫,數據表

      也許有人問,為什么要用EF創建愛你數據表,code first好處是什么?

      使用EF創建數據庫/表,只需要設計簡單的C#類,再表內容變化的時候他會自動更新數據庫結構,并且保留原有數據。

      EF很強大,支持主外鍵并且能生成和db里一樣的數據類型。由于我們這兩個表簡單,關于進階的知識我會放在這篇文章的底部作為附錄。

      根據需求,我們有兩種 input 文件。一種是trend 的一種是bar的 我們先來看看這兩種文件里的數據:

      Trend : 

      id    taskid    taskname   time    b1    equal    b2    uncertain    grandtotal    
      0     1         task1    2012-6-27    200    300    280    220    1000

      Bar :

      KeyWord    B1Better      Equal    B2Better     Winner   
      聯眾    2    0    3    0    0    B1       
      瘋狂倒計時    0    0    3    0    0    B2    
      張娜拉    0    1    2    2    0    B1   
      截圖軟件    1    0    1    1    2    B2   

       

      我們需要show 2個 chart。

      那么我們設計2個表來存儲 trend chart 和barchart 的數據,名為Trend 和Bar(本來應該是3個表。由于我們是為了自己練習,設計2個就好。)

      到這里,我才發現我們還沒為我們的project 起名字呢。叫什么好呢?我們就叫 ReportingSyncer吧。

      Reporting(報表),sync(同步),為什么加er?現在的project 命名的時候往往都擬人化,顯得生動外加比較給力。

      【開始動手】

      打開vs 2010創建一個新的class library 命名為ReportingDBManager。刪除自動生成的class1.cs 。

      修改sln(解決方案的名稱為ReportingSyncer)。

      修改命名空間:右鍵點擊ReportingDBManager。properties(屬性)->Application:CnBlogsDemos.ReportingDBManager。為啥要改?因為引用起來方便一點,而且也顯得專業:)

      現在你的sln應該是這樣

      添加Entity Framework 引用,得到這個dll 有兩種方法:

      使用NuGet ,或者去下載一個dll。在這里我使用Nuget ,EF最新版是4.3.1

      【創建表的映射類】

      添加完引用之后,我們就開始創建我們的表類了。

      添加兩個class ,名為 Trend 和 Bar。

      對應上邊input 文件的類型,我們設計兩張 匹配的表。

      bar.cs:

      namespace CnBlogsDemos.ReportingDBManager
      {
          using System.ComponentModel;
          using System.ComponentModel.DataAnnotations;
      
      
          public class Bar
          {
      
              [Key]
              [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //主鍵 自增
              public int ID { get; set; }
      public int TaskID { get; set; }
      
              [MaxLength(200)]
              public string TaskName { get; set; }
      
              /*有朋友要問了,導入文件里明明沒有以上兩個字段,為什么要設定他們?
               因為導入的時候是根據每個task 導入的,我們會在commandline里數據task id 和task name
               這樣才可以讓兩個表聯系起來,后期好做報表的drill down (鉆入)
              */
      
              [MaxLength(500)]
              public string KeyWord { get; set; }
      
              public int B1Better { get; set; }
      
              public int Equal { get; set; }
      
              public int B2Better { get; set; }
      
              [MaxLength(50)]
              public string Winner { get; set; }
      
              public string type { get; set; }
      
              [DefaultValue(true)]
              public bool IsActive { get; set; }
          }
      }

      trend.cs

      namespace CnBlogsDemos.ReportingDBManager
      {
          using System;
          using System.ComponentModel;
          using System.ComponentModel.DataAnnotations;
      
          public class Trend
          {
              public int id { get; set; }
      
              public int TaskID { get; set; }
      
              public string TaskName { get; set; }
      
              public DateTime Time { get; set; }
      
              public int B1Better { get; set; }
      
      
              public int Equal { get; set; }
      
              public int B2Better { get; set; }
      
      
              public int UnCertain { get; set; }
      
      
              public int GrandTotal { get; set; }
      
              [MaxLength(50)]
              public string type { get; set; }
      
              [DefaultValue(true)]
              public bool IsActive { get; set; }
          }
      }

       

      兩個表類創建好了。如何和數據庫聯系到一塊呢?我們需要使用EF創建一個dbcontext類了。

      添加新類:DbStoreContext.cs

      namespace CnBlogsDemos.ReportingDBManager
      {
          using System.Data.Entity;
          using System.Data.Entity.Migrations;
      
      
          internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration<DbStoreContext>
          {
              public ReportingDbMigrationsConfiguration()
              {
                  AutomaticMigrationsEnabled = true;
                  AutomaticMigrationDataLossAllowed = true;
              }
          }
      
          public class DbStoreContext : DbContext
          {
              public DbStoreContext()
                  : base("name=ReportingDataBase")
              {
                  Database.SetInitializer<DbStoreContext>(
                      new MigrateDatabaseToLatestVersion<DbStoreContext, ReportingDbMigrationsConfiguration>());
      
                  this.Configuration.LazyLoadingEnabled = false;
              }
      
              public DbSet<Bar> Bars { get; set; }
              public DbSet<Trend> Trends { get; set; }
      
      
      
          }
      }

      上邊的兩個Dbset 就是我們要創建的兩個表。

      檢查項目中app.config文件,我們會看到:

        <entityFramework>
          <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
            <parameters>
              <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />
            </parameters>
          </defaultConnectionFactory>
        </entityFramework>

      EF默認指定的數據庫是本地的Express。我們可以更改成其他標準數據庫或者是遠程數據庫(當然,你要有權限哦)。

      我們想在另一個project 里指定數據庫連接。先把這個appconfig刪除。

      有朋友要問了,什么時候能生成DB,table啊?我怎么看不見?

      別急,在我們第一次調用這個dbcontext 類的時候就會創建/更新啦!

      我會在下一章做講解。

      【附錄】

      EF創建table 時候的一些技巧,查了好多資料,希望能幫助大家:

      主鍵:

      [Key]
      public int EngineID { get; set; }

      自增主鍵:

      [Key,DatabaseGenerated(DatabaseGeneratedOption.None)]
      public int EngineID { get; set; }

      可以編輯的主鍵(默認是readonly)

      [Key,Editable(true),DatabaseGenerated(DatabaseGeneratedOption.None)]
      public int EngineID { get; set; }

      非空字段:

        [Required]
        public string EngineName { get; set; }

      限定長度的非空字段:

        [Required, MaxLength(256)]
         public string EngineName { get; set; }

      外鍵比較特殊,需要解釋一下兩個table之間的關系。

      table1包含 一個 字段 taskID。

      table task 的主鍵是taskID。需要創建愛你一個 task類型的字段。關系如下:

      public class Table1
      {
        [Required, ForeignKey("Task")]
              public int TaskID { get; set; }
      
        public virtual Task Task { get; set; }
      
      }
      
      public class Task
      {
        [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
              public int TaskID { get; set; }
      }

      時間戳:

              [ConcurrencyCheck]
              [Timestamp]
              public byte[] TimeStamp { get; set; } 

      c# 里的 int32 對應 db 里的int 。int16 對應 smallint,bool 對應bit,byte[]對應binary等等。

       

       

      posted @ 2012-07-04 15:37  技術弟弟  閱讀(5851)  評論(12)    收藏  舉報
      主站蜘蛛池模板: 亳州市| 人摸人人人澡人人超碰97| 国产va免费精品观看精品| 一本无码在线观看| 免费观看全黄做爰大片| 黑人大战中国av女叫惨了| 国产精品视频一区二区不卡| 办公室强奷漂亮少妇同事| 九九热视频在线精品18| 久久精品国产蜜臀av| 国产AV福利第一精品| 毛片网站在线观看| 四虎国产精品永久入口| 国产精品av免费观看| 国产精成人品日日拍夜夜免费| 国产一区日韩二区欧美三区| 日本伊人色综合网| 青草国产超碰人人添人人碱| 国产亚洲精品成人aa片新蒲金 | 亚洲欧洲日产国码久在线| 日日碰狠狠添天天爽| 国产av一区二区三区综合| 国产精品av中文字幕| 国产在线亚州精品内射| 亚洲综合伊人久久大杳蕉| 亚洲欧美综合中文| аⅴ天堂中文在线网| 久久精品无码专区免费东京热 | 欧美人禽zozo动人物杂交| 67194熟妇人妻欧美日韩| 亚洲熟女少妇乱色一区二区| 亚洲日本韩国欧美云霸高清| 四虎永久播放地址免费| 人妻有码av中文字幕久久琪| 午夜精品国产自在| 国产亚洲人成网站在线观看| awww在线天堂bd资源在线| 国产精品高清视亚洲中文| 小嫩批日出水无码视频免费| 久久久久久久波多野结衣高潮| 中文无码精品a∨在线|