0

У меня есть база данных, и у меня есть сущность POCO, и все, что я хочу использовать EF, это сопоставление между ними и отслеживание изменений для загрузки, сохранения и т. Д.EF CTP4: Только для кода, не требуется генерация базы данных, какая информация необходима для БД?

Я читал много литература (например, она есть) на «Code First», и я не понимаю, какую часть информации базы данных мне нужно предоставить, когда не будет создана база данных.

Например, EF должен знать, какие свойства являются ключами, максимальная длина строковых свойств, отношения между таблицами и т. Д.? Или, если это нужно знать, может ли он получить эту информацию из самой базы данных? Другими словами, нужно ли предоставлять аннотации [Key] и т. Д. Или предоставлять информацию о конфигурации, описывающую отношения внешнего ключа, если не нужно создавать базу данных?

ОБНОВЛЕНИЕ: Чтобы сделать вещи немного яснее, следующий код - это то, о чем я говорю. Мне нужно вручную создать этот класс, полученный из DbContext. Я мог бы предоставить много информации о DB о свойствах в OnModelCreating или в атрибутах, связанных с свойствами в классах сущностей.

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 знает, что ключ генерируется в магазине (например, автоматически увеличивается), он не будет жаловаться, если вы не установите его на новую запись, потому что он предположит, что БД сделает это.

Однако подход, основанный только на использовании кода, использует подход «соглашение по конфигурации». Вам не нужно указывать значения, которые EF может угадать. You can read about those here.

Если вы делаете только код, EF вообще не смотрит на БД при создании модели.

Невозможно рассказать EF, чтобы посмотреть код и БД для создания модели. Вы должны выбрать тот или другой.

+0

Я понимаю. Я не говорю об использовании EF для создания модели из базы данных. Но я поставлю строку соединения для объекта контекста. Он должен знать что-то о базе данных, чтобы сохранить данные. Мне просто интересно, нужно ли ему знать ВСЕ (ключи, отношения и т. Д.), Если он не собирается создавать базу данных. – Cynthia

+0

При дальнейшем чтении кажется, что вам, возможно, нужно предоставить все для контекстного объекта, потому что вам нужно воссоздать в памяти все данные, которые обычно поставляются в XML в файле EDMX. Но я не уверен в этом ... следите за обновлениями. – Cynthia

+0

Я обновил свое сообщение, чтобы включить код, который находится в центре моей озабоченности. – Cynthia

 Смежные вопросы

  • Нет связанных вопросов^_^