2015-09-23 2 views
0

Я учусь и работаю сразу. Простой учебник научил меня сначала создавать базу данных с использованием кода. Теперь я хочу несколько таблиц, но у меня есть несколько баз данных. Я почти уверен, что это неправильно, не так ли?Как использовать код Entity Framework Сначала правильно с несколькими таблицами

Пример: У меня есть одна база данных для пользователей под названием «DefaultConnection» с таблицами, как «AspNetRoles», «AspNetUsers» и так далее. Отлично.

Но ... У меня есть отдельная база данных для блогов под названием «BlogDBContext» с одной таблицей. У меня есть другая база данных для уроков под названием «LessonDBContext» с одной таблицей для уроков. Мой друг говорит , это неправильно, и я думаю, что он прав, но он продолжает ломать вещи, когда пытается его исправить.

Каков правильный способ использования кода для настройки таблиц для разных моделей без создания целых новых баз данных?

FWIW Я думаю, что это о том, где я завинчивание: general secion of the tutorial I got it from

Я делаю что-то вроде этого для каждого из них:

namespace ScatterSchool.Models 
{ 
    public class Lesson 
    { 
     public int Id { get; set; } 
     public string Subject { get; set; } 
     public string Body { get; set; } 
     public string Tags { get; set; } 
     [Display(Name = "Lesson Date")] 
     [DataType(DataType.Date)] 
     [DisplayFormat(DataFormatString = "{0:yyy-MM-dd}", ApplyFormatInEditMode = true)] 
     public DateTime LessonDate { get; set; } 

     //public virtual User User { get; set; } 
    } 

    public class LessonDBContext : DbContext 
    { 
     public DbSet<Lesson> Lessons { get; set; } 
    } 
} 

настроить строки подключения в Web.Config, и т. д. И я получаю новую базу данных с таблицей уроков ...

Не уверен, что он делает, но он получает одну базу данных с уроками, блогами и таблицами пользователей, и все это broken. Его код выглядит так же, но он изолируя все DbContexts:

namespace ScatterSchool.Models { 
    public partial class Lesson { 

     public int ID { get; set; }  
     public string Subject { get; set; } 
     public string Body { get; set; } 
     public string Tags { get; set; } 
     public string DateCreated { get; set; } 
     public int User_Id { get; set; } 
     public virtual User User { get; set; } 

    } 
} 

и контексты:

namespace ScatterSchool.Models { 
    using System; 
    using System.Data.Entity; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.Linq; 

    public partial class DatabaseContext : DbContext { 
     public DatabaseContext() : base("name=Database") { } 

     public virtual DbSet<Blog> Blogs { get; set; } 
     public virtual DbSet<Lesson> Lessons { get; set; } 
     public virtual DbSet<User> Users { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
      modelBuilder.Entity<User>() 
       .HasMany(e => e.Lessons) 
       .WithRequired(e => e.User) 
       .HasForeignKey(e => e.User_Id); 
     } 
    } 
} 

я делаю вещи, которые не нарушена, но я думаю, что я делаю это более неправильно. Он заставляет вещи сломаться, но я думаю, что он делает что-то более справедливое.

Я просто хочу получить общее руководство или советы по правильной настройке фоновых данных для каждой из моих моделей.

окончательный, но важный вопрос: Должен ли я оставить базу данных DefaultConnection со всеми жизненно безопасного входа в систему только вещи и сделать новый один для всего остального, или просто добавлять таблицы в этой базе данных? I в конечном итоге хотят показывать разные блоги/уроки для разных пользователей.

+0

Просто используйте одну базу данных. Настройте одну строку соединения в файле web.config и используйте имя этой строки соединения в базовом конструкторе для вашего DatabaseContext. Поэтому, если строка соединения называется DefaultConnection, в вашем DatabaseContext, который сделал ваш друг, передайте базовому конструктору строку «name = DefaultConnection», – JB06

ответ

1

Ваш друг прав в том, что он говорит вам делать. Ваши модели должны иметь один DbContext. Код, который вы предоставили в своем примере того, что делает ваш друг, должен работать.

Единственное, что я мог видеть, что ломает все, - это то, что у вас больше не будет объекта LessonDBContext или BlogDBContext. Это просто нужно было изменить на ваш единственный DatabaseContext, и все должно работать должным образом.

Что касается окончательного вопроса, я не вижу причины отделить вашу систему входа от остальной основной базы данных. Скорее всего, было бы проще всего иметь одну базу данных, если вы не планируете использовать AspNetUsers для более чем одной службы.

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