This presentataion slide describes Microsoft.NET Framework 4 ADO.NET Entity Framework and was used for VSUG Day 2010 Summer in Japan.
VSUG (Visual Studio Users Group)
The document discusses an upcoming VSUG Leaders Summit 2008 event. It mentions lightning talks on the Web Client and Software Factory topics. It also notes plans to attend Tech Ed 2008 and a discussion on activities with the Web Client Software Factory and GAT/GAX. The summary touches on debates around personnel aspects and requirements for the Software Factory.
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
1. VSUG DAY 2010 Summer
ADO.NET Entity Framework
を使いこなそう
福井 厚 ( Twitter: @afukui )
VSUG運営委員
Microsoft Certified Architect
Microsoft Regional Director
Microsoft MVP for Visual C#
2. 自己紹介
福井 厚 (ふくい あつし)
アバナード株式会社
Group Manager / CTO Architect
Visual Studio User Group 運営委員
Microsoft Certified Architect (MCA)
Microsoft Regional Director
Microsoft MVP for Visual Developer – C#
Blog: http://www.users.gr.jp/blogs/fukui/
Twitter: @afukui
VSUG DAY 2010.05.09
13. Entity Data Model の概念
エンティティ型
Entity Data Model でデータ構造を記述するために不可欠な構成要素
継承をサポート
アソシエーション型
Entity Data Model でリレーションシップを記述するために不可欠な構
成要素
アソシエーションに含まれるエンティティ型を指定する 2 つのアソシ
エーション End がある
アソシエーションのその End に存在できるエンティティ数を示すアソ
シエーション End の多重度も指定する必要がある
プロパティ
エンティティ型には、その構造と特性を定義するプロパティが含まれる
プロパティには、プリミティブ データ (文字列、整数、ブール値など) または構
造化データ (複合型) を含めることができる
VSUG DAY 2010.05.09
25. LINQ to Entities
メソッドベースの構文例(射影)
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
var query = AWEntities.Products
.Select(product => new
{
ProductId = product.ProductID,
ProductName = product.Name
});
Console.WriteLine("Product Info:");
foreach (var productInfo in query)
{
Console.WriteLine("Product Id: {0} Product name: {1} ",
productInfo.ProductId, productInfo.ProductName);
}
}
VSUG DAY 2010.05.09
26. LINQ to Entities
クエリ式の構文例(射影)
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
ObjectSet<Product> products = AWEntities.Products;
IQueryable<Product> productsQuery = from product in products
select product;
Console.WriteLine("Product Names:");
foreach (var prod in productsQuery)
{
Console.WriteLine(prod.Name);
}
}
VSUG DAY 2010.05.09
27. LINQ to Entities
クエリ式の構文例(フィルター処理)
ObjectSet<SalesOrderHeader> orders = AWEntities.SalesOrderHeaders;
var onlineOrders =
from order in orders
where order.OnlineOrderFlag == true
select new
{
SalesOrderID = order.SalesOrderID,
OrderDate = order.OrderDate,
SalesOrderNumber = order.SalesOrderNumber
};
VSUG DAY 2010.05.09
28. LINQ to Entities
クエリ式の構文例(集計演算子処理)
ObjectSet<Product> products = AWEntities.Products;
var query = from product in products
group product by product.Style into g
select new
{
Style = g.Key,
AverageListPrice =
g.Average(product => product.ListPrice)
};
foreach (var product in query)
{
Console.WriteLine("Product style: {0} Average list price: {1}",
product.Style, product.AverageListPrice);
}
VSUG DAY 2010.05.09
29. LINQ to Entities
クエリ式の構文例(パーティション分割)
var query = (from album in albums
where album.Artist.Name == "Deep Purple"
orderby album.Title
select new
{
Title = album.Title,
Name = album.Artist.Name
}).Take(3);
VSUG DAY 2010.05.09
30. LINQ to Entities
クエリ式の構文例(結合演算子)
GroupJoin() 左外部結合に相当
var query =
from contact in contacts
join order in orders
on contact.ContactID
equals order.Contact.ContactID into contactGroup
select new
{
ContactID = contact.ContactID,
OrderCount = contactGroup.Count(),
Orders = contactGroup.Select(order => order)
};
VSUG DAY 2010.05.09
31. LINQ to Entities
クエリ式の構文例(グループ化)
var query = (
from contact in contacts
group contact by contact.LastName.Substring(0, 1) into contactGroup
select new { FirstLetter = contactGroup.Key,
ContactGroup = contactGroup }).
OrderBy(letter => letter.FirstLetter);
foreach (var contact in query)
{
Console.WriteLine("Last names that start with the letter '{0}':",
contact.FirstLetter);
foreach (var name in contact.ContactGroup)
{
Console.WriteLine(name.LastName);
}
}
VSUG DAY 2010.05.09
37. オブジェクトの作成と追加
using (ChinookEntities context = new ChinookEntities())
{
ObjectSet<Artist> artists = context.Artists;
//ArtistIdはIdentityとして宣言されているので、初期値(0)は無視される
Artist artist = Artist.CreateArtist(0);
artist.Name = "Atsushi Fukui";
artists.AddObject(artist);
context.SaveChanges();
Console.WriteLine("Added Artist id {0} name {1}", artist.ArtistId, artist.Name);
VSUG DAY 2010.05.09
38. オブジェクトの削除
using (ChinookEntities context = new ChinookEntities())
{
ObjectSet<Artist> artists = context.Artists;
Artist artist = artists.Where("it.Name=@name",
new ObjectParameter("name", "Atsushi Fukui")).First();
if (artist != null)
{
artists.DeleteObject(artist);
context.SaveChanges();
}
}
VSUG DAY 2010.05.09
39. オブジェクトの更新
object entity = null;
IEnumerable<KeyValuePair<string, object>> keyValues =
new KeyValuePair<string, object>[]{
new KeyValuePair<string, object>("ArtistId", 279)
};
EntityKey key = new EntityKey("ChinookEntities.Artists", keyValues);
if (context.TryGetObjectByKey(key, out entity))
{
Artist artist = (Artist)entity;
artist.Name = "Hideharu Moriya";
context.SaveChanges();
}
Artist a = context.Artists.Where(o => o.ArtistId == 279).First();
if (a != null)
{
Console.WriteLine(“artist id {0}, name {1}”, a.ArtistId, a.Name);
}
VSUG DAY 2010.05.09
50. 自動生成されるSQLの一部
-- Creating table 'Parties'
CREATE TABLE [dbo].[Parties] (
[Id] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(max) NOT NULL
);
GO
-- Creating table 'Parties_Organization'
CREATE TABLE [dbo].[Parties_Organization] (
[Location] nvarchar(max) NOT NULL,
[Id] int NOT NULL
);
GO
-- Creating table 'Parties_Person'
CREATE TABLE [dbo].[Parties_Person] (
[Age] int NOT NULL,
[Id] int NOT NULL
);
GO
VSUG DAY 2010.05.09