1. 程式人生 > >Entity Framework(二)

Entity Framework(二)

關系 標註 操作數 因此 entity req tex ber 階段

1、 ORM :Object Relation Mapping ,通俗說:用操作對象的方式來操作數據庫。

2、 插入數據不再是執行Insert,而是類似於 Person p=new Person() ; p.Age=3;p.Name="wang" ;db.save(p);這樣的做法;

3、ORM工具有很多Dapper、PetPoco、NHibermate,首推Entity Framework

4、EF底層還是多ADO.Net的封裝.

5、使用EF進行數據庫開發的時候有兩個東西建立:建數據庫,建模型類。根據這兩種創建的先後順序有EF的三種創建方法:

(1) Database First(數據庫優先):先創建數據庫表,然後自動生成EDM文件,EDM文件生成模型類

(2)Model First (模型優先):先創建Edm文件,Edm文件自動生成模型類和數據庫;

(3)Code First(代碼優先):自己寫模型類,然後生成數據庫,沒有EDM。

6、EF安裝

(1)基礎階段用控制臺項目,使用Nuget安裝EntityFramework 會自動再APP‘config 中增加兩個EntityFramework相關的配置;

(2)在web.cong中配置鏈接字符串:

  <connectionStrings>
    <add name="connstr" connectionString="
Data Source=.; Initial Catalog=Test2; User Id=sa; Password=123; " providerName="System.Data.SqlClient" /> </connectionStrings>

7、 EF簡單DataAnnotations實體配置

(1)數據庫創建表:T_Persons,有Id(主鍵,自動增長) ,Name,CreateDateTime;

(2)創建Person類

    [Table("T_Persons")] //因為和表名不一樣,所以要使用Table標註;
   
public class Person { public long Id { get; set; } public string Name { get; set; } public DateTime CreateDateTime { get; set; } }

因為EF約定的主鍵是Id,所以不用再特殊指定Id為主鍵,如果非要指定就用[Key] .因為字段名和屬性名一樣,所以不用再特殊指定關系,如果需要[Column("Name")].

必填字段標註[Required]、字段長度[MaxLength(5)] 、可空字段 int? 、如果字段再數據庫中有默認值,則要再屬性上標註[DatabaeGenerated] 註意實體類要寫成public ,否則後面會有麻煩;

(3)創建 DbContext 類(模型類、實體類)

   public class TestDbContext:DbContext
    {
        public TestDbContext():base("name=connstr")//name=connstr 表示使用連接字符串中名字為connstr的數據庫
        {

        }
        public DbSet<Person> Persons { get; set; }
    }

(4)測試:

        static void Main(string[] args)
        {
            using (TestDbContext ctx = new TestDbContext())
            {
                Person p1 = new Person()
                {   
                    CreateDateTime = DateTime.Now,
                    Name = "wang"
                };
                ctx.Persons.Add(p1);
                ctx.SaveChanges();
            }
        }

註意: MyDbConnect 對象是否需要using有爭議,不using也沒事,每次用的時候new MyDbConnect就行,不用共享同一實例,共享反而會有問題。saveChanges()才會更新到數據庫中。EF開發團隊都說要using,很多人不用,只是想利用LazyLoad而已,但是那樣做是違反分層的原則的。習慣用using

8、 EF模型的兩種配置方式:

EF中的模型類有兩種配置方式:DataAnnotations、FluentAPI兩種。上面這種在模型類上[Table"T_Person")]、[Column("Name")]這種方式就叫 DataAnnotations。這種方式方便,但是耦合度太高,一般的類最好是POCO(就是一個普通的類),不符合大項目開發的要求。微軟推薦使用FluentAPI,因此主要用FluentAPI

Entity Framework(二)