0

J'ai une base de données, et j'ai l'entité POCO, et tout ce que je veux utiliser EF pour est de cartographier entre les deux et garder une trace des changements pour le chargement, l'enregistrement, etcEF CTP4: Pour le code uniquement, aucune génération de base de données nécessaire, combien d'informations de base de données sont nécessaires?

J'ai lu beaucoup de la littérature (telle qu'elle est) sur "Code First", et je ne suis pas clair sur la quantité d'informations de base de données que je dois fournir quand il n'y aura pas de base de données générée.

Par exemple, EF a-t-il besoin de savoir quelles propriétés sont des clés, la longueur maximale des propriétés de la chaîne, les relations entre les tables, etc.? Ou si elle a besoin de savoir, peut-elle obtenir cette information de la base de données elle-même? En d'autres termes, dois-je fournir des annotations [Key] et autres, ou fournir des informations de configuration détaillant les relations de clé étrangère, si aucune base de données n'a besoin d'être créée? MISE À JOUR: Pour rendre les choses un peu plus claires, le code suivant est de quoi je parle. Je dois créer manuellement cette classe dérivée de DbContext. Je pourrais fournir beaucoup d'informations de DB sur les propriétés dans OnModelCreating, ou dans les attributs attachés aux propriétés dans les classes d'entité.

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

Répondre

1

Oui, l'EF ne ont besoin d'informations sur les longueurs string sur le terrain, les clés étrangères, etc., dans le modèle. Par exemple, si un DB FK a une cascade, l'EF doit le savoir afin qu'il ne vous force pas à supprimer manuellement les enregistrements de détail; si l'EF est conscient de la cascade, il laissera la DB gérer cela. De même, si l'EF est conscient qu'une clé est générée en magasin (par exemple, auto-incrémentée), elle ne se plaindra pas si vous ne la définissez pas sur un nouvel enregistrement, car elle supposera que la base de données le fera.

Cependant, l'approche de code uniquement prend une approche «convention sur configuration». Vous n'avez pas besoin de spécifier des valeurs que l'EF peut deviner. You can read about those here.

Si vous effectuez un code uniquement, l'EF ne regarde pas du tout la base de données lors de la création du modèle.

Il n'y a aucun moyen de dire à l'EF de regarder le code et la base de données pour créer le modèle. Vous devez choisir l'un ou l'autre.

+0

Je comprends. Je ne parle pas d'utiliser EF pour créer le modèle à partir de la base de données. Mais je fournis une chaîne de connexion à l'objet contexte. Il doit savoir quelque chose sur la base de données afin de sauvegarder les données. Je me demande simplement si elle a besoin de savoir TOUT (clés, relations, etc.) si elle ne va pas créer la base de données. – Cynthia

+0

En lisant plus loin, il semble que vous deviez peut-être tout fournir à l'objet contexte, car vous devez recréer en mémoire toutes les données normalement fournies en XML dans le fichier EDMX. Mais je ne suis pas sûr de ça ... restez à l'écoute. – Cynthia

+0

J'ai mis à jour mon message pour inclure le code qui est au centre de mes préoccupations. – Cynthia