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