1. 程式人生 > >Entity Framework 中 Schema是什麽

Entity Framework 中 Schema是什麽

原來 使用 來看 創建 func () byte http object

在使用Entity Framework時,會註意到下面這句:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.HasDefaultSchema("DEV");
..... }

如果是sql server的話,寫上dbo. 就行了

如果是oracle的話,寫上“用戶名”。

如果schema是用戶的話,那為什麽不叫HasDefaultUser呢? 非要叫個schema,弄的我都不知道怎麽翻譯它!

我們再來看,在數據遷移的過程生成的語句:

CreateTable(
                "DEV.BackgroundJobs",
                c => new
                    {
                        Id = c.Long(nullable: false, identity: true),
                        JobType = c.String(nullable: false, maxLength: 512),
                        JobArgs = c.String(nullable: false
), TryCount = c.Short(nullable: false), NextTryTime = c.DateTime(nullable: false), LastTryTime = c.DateTime(), IsAbandoned = c.Boolean(nullable: false), Priority = c.Byte(nullable: false
), CreationTime = c.DateTime(nullable: false), CreatorUserId = c.Long(), }) .PrimaryKey(t => t.Id) .Index(t => new { t.IsAbandoned, t.NextTryTime });

更加堅定了我的判斷 ,schema就是用戶名.

然而,經過一翻百度... 終於顛覆了我的認識。

DEV.BackgroundJobs。這裏的DEV不是用戶,是schema.

總的來看:

1. 用戶user不是管理表的,user只是負責連接數據庫的。別把它想的那麽復雜。

2. schema是管理數據庫對象的,當然包括表了,還有packages functions proceures等。

總結一句:

A USER may be given access to SCHEMA OBJECTS owned by different USERS. (https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6162110256950)

但這裏也解釋不了為什麽user和schema會重名。

原來,當在數據庫中創建了一個用戶的時候,會自動創建一個同名的schema.

引用上文的話:

once you create a user in the database -- there is a schema. it is empty, but there is a schema. 

In fact, we have the concept of a schemaless user (user is stored outside the database, in an ldap respository for example). Here, there is no schema, not even the empty one. 

後面這句我選擇忽略,很少用到。

所以最後用這位Tom大叔的話,做一個總結:他們是完全可相互替換使用

in oracle for all intents and purposes they are 100% interchangeable. 

Entity Framework 中 Schema是什麽