اگر از VS 2013 و EF 6 استفاده میکنید، حالت DB First آن در حقیقت مهندسی معکوس دیتابیس موجود به حالت Code first است. برای مثال اگر این فایل DbModel.edmx را تولید کند، ذیل آن فایل DbModel.Context.
tt مشخص است که حاصل آن تولید خودکار یک چنین کلاسی است:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace EFDbFirstDependencyInjection.DataLayer
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class TestDbIdentityEntities : DbContext
{
public TestDbIdentityEntities()
: base("name=TestDbIdentityEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<Product> Products { get; set; }
}
}
این کلاس دقیقا از DbContext حالت Code first استفاده میکند و کلا ObjectContext قدیمی را کنار گذاشتهاند (حتی برای حالت DB First).
بنابراین تمام نکات مطلب جاری در مورد حالت DB First موجود در VS 2013 صادق است. فقط باید فایل DbModel.Context.
tt آنرا اصلاح کنید تا IUnitOfWork را به صورت خودکار به انتهای تعریف کلاس Context اضافه کند. مابقی مسایل آن یکی است.