0

我有一個數據庫,我有實體POCO的,我想使用EF的所有我想要在兩者之間進行映射並跟蹤加載,保存等的更改。EF CTP4:僅用於代碼,不需要生成數據庫,需要多少數據庫信息?

我一直在閱讀很多關於「Code First」的文獻(比如它),並且我不清楚在不會生成數據庫時需要提供多少數據庫信息。

例如,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"); 
    } 
} 

回答

1

是的,EF 需要對string字段長度,外鍵等信息,在模型中。例如,如果DB FK具有級聯,則EF需要知道這一點,以便它不會強制您手動刪除詳細記錄;如果EF知道級聯,它將讓DB處理。同樣,如果EF知道一個密鑰是商店生成的(例如,自動遞增的),那麼當它沒有設置在新記錄上時它不會抱怨,因爲它會假定DB會這樣做。

但是,僅有代碼的方法採用「約定優於配置」方法。您不必指定EF可以猜出的值。 You can read about those here

如果您只做Code Only,EF在創建模型時根本不會查看數據庫。

有沒有辦法告訴EF看代碼 DB創建模型。你必須選擇一個或另一個。

+0

我明白。我不是在談論使用EF從數據庫創建模型。但是我提供了一個連接字符串給上下文對象。它必須知道關於數據庫的一些信息才能保存數據。我只是想知道,如果它不打算創建數據庫,它是否需要知道一切(鍵,關係等)。 – Cynthia 2010-09-02 16:10:22

+0

在進一步閱讀中,似乎您可能必須將所有內容都提供給上下文對象,因爲您必須在內存中重新創建EDMX文件中通常以XML格式提供的所有數據。但我不確定...請繼續關注。 – Cynthia 2010-09-02 16:12:24

+0

我已更新我的帖子以包含我關注的焦點所在的代碼。 – Cynthia 2010-09-02 16:21:51