Entity Framework 中 Schema是什麽
阿新 • • 發佈:2017-11-01
原來 使用 來看 創建 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是什麽