EF + WCFデータサービス(ODataはプロトコル、WCF DSはMicrosoftによるODataの実装)の優れた点は、これの多くが魔法であるということです。特別な結合やその他の魔法は必要ありません。
始めるためのコードは次のとおりです:(以下で説明します、約束します)。
using System;
using System.Data.Entity;
using System.Data.Services;
using System.Data.Services.Common;
using System.ServiceModel;
namespace Scratch.Web
{
// 4
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
// 1
public class ScratchService : DataService<ScratchContext>
{
static ScratchService()
{
// 2
Database.SetInitializer(new ScratchContextInitializer());
}
public static void InitializeService(DataServiceConfiguration config)
{
// 3
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
// 4
config.UseVerboseErrors = true;
}
}
public class ScratchContextInitializer : DropCreateDatabaseIfModelChanges<ScratchContext>
{
protected override void Seed(ScratchContext context)
{
base.Seed(context);
// 5
context.Products.Add(new DiscontinuedProduct
{
Name = "DP1",
DiscontinuedAt = DateTime.Now.AddDays(-7)
});
context.Products.Add(new DiscountedProduct
{
Name = "DP1",
Discount = 3.14
});
}
}
// 6
public class ScratchContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
// 7
public abstract class Product
{
public int ID { get; set; }
public string Name { get; set; }
}
// 7
public class DiscountedProduct : Product
{
public double Discount { get; set; }
}
// 7
public class DiscontinuedProduct : Product
{
public DateTime DiscontinuedAt { get; set; }
}
}
クイックウォークスルー:
- 1:
ScratchService
この場合はWCFデータサービスです。ジェネリック型として(EFコンセプト)を継承しDataService<T>
て提供します。DbContext
- 2:このコードは常に変更しているため、静的コンストラクターを使用してデータベース初期化子を設定します。
- 3:エンティティセットとサービスオペレーションをサービスコンシューマーに表示します(
*/All
アプローチはお勧めしません)。
- 4:デバッグを有効にします(常に便利です)
- 5:データベースにシードしてデータを取得します
- 6:
DbContext
EFのを作成し、抽象クラスProduct
をとして公開しDbSet
ます。(使用するにはWCF DS5以降が必要であることに注意してくださいDbContext
。WCFDS5.0.1[または勇気がある場合は5.1.0-rc1]とEF4.3.1は一緒にうまく機能します。)
- 7:ルートに抽象クラスと2つの派生クラスを持つクラス構造を作成します。
EFが機能しているときは、次のルールに従うことに注意してください。-属性がProductId
なくてもDataServiceKey
、EFは、WCFDSが尊重するエンティティのキーを作成します-TPT/ TPH/TPCはすべてEF設定に準拠しています-Ifデータベースから最初にコードを実行したい場合(おそらく実行しているように聞こえます)、それを支援するダウンロードがあります