0

私はデータベースを持っており、エンティティ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");
    }
}
4

1 に答える 1

1

はい、EFには、モデル内のフィールド長、外部キーなどに関する情報必要です。stringたとえば、DB FKにカスケードがある場合、EFはそれを認識して、詳細レコードを手動で削除する必要がないようにする必要があります。EFがカスケードを認識している場合は、DBにそれを処理させます。同様に、EFがキーがストアで生成されている(自動インクリメントなど)ことを認識している場合、DBがそれを行うと想定するため、新しいレコードに設定しなくても文句を言うことはありません。

ただし、コードのみのアプローチでは、「設定より規約」のアプローチを採用しています。EFが推測できる値を指定する必要はありません。あなたはここでそれらについて読むことができます

コードのみを実行している場合、EFはモデルの作成時にDBをまったく調べません。

EFにコードを調べてDBにモデルを作成するように指示する方法はありませ。どちらかを選択する必要があります。

于 2010-09-02T12:49:13.680 に答える