2015-09-23 35 views
0

我正在學習和工作一次。一個簡單的教程教會了我先使用代碼創建數據庫。現在我想要幾張表,但是我最終得到了幾個數據庫。我很確定這是錯的,對吧?如何使用實體框架代碼首先正確地使用多個表

例子:我有網友稱其爲 「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中設置連接字符串,等等...而我得到一個新的數據庫與教訓表...

不知道他在做什麼,但他得到一個數據庫與課程,博客和用戶表,一切都是。他的代碼看起來類似,但他隔離所有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,並且所有內容都應按預期工作。

至於你最後的問題,我沒有看到一個理由從主數據庫的其餘部分分離你的登錄系統。除非您打算將AspNetUser用於多個服務,否則最簡單的方法就是擁有一個數據庫。

相關問題