私はデータベースを持っており、エンティティPOCOを持っています。EFを使用したいのは、2つの間をマッピングし、ロード、保存などの変更を追跡することだけです。
私は「コードファースト」に関する多くの文献を読んでいますが、データベースが生成されないときに提供する必要のあるデータベース情報の量がわかりません。
たとえば、EFは、どのプロパティがキーであるか、文字列プロパティの最大長、テーブル間の関係などを知る必要がありますか?または、知る必要がある場合、データベース自体からその情報を取得できますか?つまり、データベースを作成する必要がない場合、[Key]アノテーションなどを提供する必要がありますか、それとも外部キー関係の詳細を示す構成情報を提供する必要がありますか?
更新:物事をもう少し明確にするために、次のコードは私が話しているものです。DbContextから派生したこのクラスを手動で作成する必要があります。OnModelCreatingのプロパティ、またはエンティティクラスのプロパティにアタッチされた属性に関する多くのDB情報を提供できます。
public class SchedulerContext : DbContext
{
public SchedulerContext(EntityConnection connection)
: base(connection)
{
}
public DbSet<Client> Clients { get; set; }
public DbSet<ConsultantDistrict> ConsultantDistricts { get; set; }
public DbSet<ConsultantInterviewSetting> ConsultantInterviewSettings { get; set; }
public DbSet<ConsultantUnavailable> ConsultantsUnavailable { get; set; }
public DbSet<CustomEmailTemplate> CustomEmailTemplates { get; set; }
public DbSet<DateEvent> DateEvents { get; set; }
public DbSet<Event> Events { get; set; }
public DbSet<EventItem> EventItems { get; set; }
public DbSet<EventItemUserViewed> EventItemsUserViewed { get; set; }
public DbSet<FlaggedDate> FlaggedDates { get; set; }
public DbSet<Interview> Interviews { get; set; }
public DbSet<Interviewee> Interviewees { get; set; }
public DbSet<IntervieweeNote> IntervieweeNotes { get; set; }
public DbSet<InterviewEvent> InterviewEvents { get; set; }
public DbSet<NotificationSent> NotificationsSent { get; set; }
public DbSet<SchedulerRole> SchedulerRoles { get; set; }
public DbSet<SiteEvent> SiteEvents { get; set; }
public DbSet<UnavailableHour> UnavailableHours { get; set; }
public DbSet<UserLogin> UserLogins { get; set; }
public DbSet<UserSites> UserSites { get; set; }
public DbSet<Visit> Visits { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ConsultantUnavailable>().MapSingleType().ToTable("ConsultantsUnavailable");
modelBuilder.Entity<EventItemUserViewed>().MapSingleType().ToTable("EventItemsUserViewed");
}
}