0

ここ数週間、私はエンティティ フレームワークを学んでおり、ADO.Net といくつかの LINQ 構文に触れていました。基本的に、実際に開発に取り掛かる前に、セットアップと配線を行う必要が非常に多くあります。私は特に Code First アプローチに苦労しており、Julie Larnam の情熱的なブログにも時間を費やしています。私の学習とより深い理解を促進するために、エンティティフレームワークに関する本、記事、またはブログに関する提案をいただければ幸いです。

ありがとう

4

1 に答える 1

1

初期化

ステップ 1、モデルのセットアップ

public class Person
{
    public Int32 Id { get; set; }
    public String Name { get; set; }
    public String Email { get; set; }

    // one-to-many relationship to Pet (EF picks up on this automatically)
    public ICollection<Pet> Pets { get; set; }
}
public class Pet
{
    public Int32 Id { get; set; }
    public String Name { get; set; }
    public String Breed { get; set; }

    // foreign key back to person (EF picks up on this automatically)
    public Person Owner { get; set; }
}

ステップ 2、モデルを使用してコンテキストを作成する

public MyContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public DbSet<Pet> Pets { get; set; }


}

ステップ 3、connectionString を作成する

protip: 接続文字列の名前は、コンテキストの名前と一致する必要があります。

<connectionStrings>
  <add name="MyContext"
       providerName="System.Data.SqlClient"
       connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyContext;IntegratedSecurity=True;" />
</connectionStrings>

駆け抜ける

基本

// automatically find the connection string matching the context name,
// as well as performs a check to see if:
// 1. The database exists
// 2. The schema is up-to-date
MyContext context = new MyContext();
context.Persons.Add(new Person {
  Name = "Brad Christie",
  Email = "bchristie@contoso.com"
});
context.SaveChanges();

中級

を使用してデータの生成方法を変更することもできますInitializers。たとえば、データベースに情報を事前入力する場合は、次のようにします。

public class MyContextInitializer
  // this could be `DropCreateDatabaseAlways<TContext> or any other
  // preexsting initializer:
  : DropCreateDatabaseIfModelChanges<MyContext>
  // you can also create your own explicitly if you implement the
  // following interface, but that's a bit much starting out.
  //: IDatabaseInitializer<MyContext>
{
    protected override void Seed(MyContext context)
    {
       new List<Person> {
           new Person {
               Name = "Brad Christie",
               Email = "bchristie@contoso.com",
               Pets = new HashSet<Pet> {
                   new Pet {
                       Name = "Spot",
                       Breed = "Dalmation"
                   }
               }
           }, new Person {
               Name = "Alaxi04",
               Email = "Alaxi04@contoso.com",
               Pets = new HashSet<Pet> {
                   new Pet {
                       Name = "Petey",
                       Breed = "Parrot"
                   }
               }
           }
       }.ForEach(p => context.Persons.Add(p));

       base.Seed(context);
    }
}

実際には:

// call this somewhere early on in the application (but only once!)
Database.SetInitializer<MyContext>(new MyContextInitializer());
// This can also be configured through the `web.config`:
<entityFramework>
  <contexts>
    <context type="MyNamespace.MyContext, MyAssembly">
      <databaseInitializer type="MyNamespace.MyContextInitializer, MyAssembly" />
    </context>
  </contexts>
</entityFramework>

/* ***** */

 // then use the context as normal:
 MyContext context = new MyContext();
 var petOwners = context.Persons.AsEnumerable();
于 2013-09-06T13:31:05.817 に答える