我們對此項目的數據庫使用實體框架代碼優先。最佳代碼中心ID表第一種方法
我們的需求需要一箇中心的'資源'表,帶有一列ResourceId(uniqueidentifier NOT NULL DEFAULT(newsequentialid()))。 各種表格將使用此表作爲其ID。
簡介 - 簡檔(唯一標識符NOT NULL) 組織 - OrganizationId(唯一標識符NOT NULL) 文件= DocumentId(唯一標識符NOT NULL)
所以,如果我創建一個新的檔案記錄,我將創建一個新的資源記錄並使用該順序創建的Guid作爲新配置文件記錄的ID。
原因是爲了防止配置文件中的Id始終作爲組織的Id存在。 (我知道,這是最有可能不可能的,但並非不可能。)
現在我們有關係,定義這個是這樣的:
public class Resource : BaseEntity
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ResourceId { get; set; }
public virtual Profile Profile_ProfileId { get; set; }
//...
}
public class Profile : BaseEntity, IAuditableEntity
{
[Key]
public Guid ProfileId { get; set; }
public virtual Resource Resource { get; set; }
//...
}
public class ProfileMapping : EntityTypeConfiguration<Profile>
{
public ProfileMapping()
{
//Primary key
HasKey(t => t.ProfileId);
//Constraints
Property(t => t.ProfileId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
//...
ToTable("Profile");
//Create Relation
HasRequired(t => t.Resource).WithOptional(t => t.Profile_ProfileId);
}
}
然後,當我們創建一個新的配置文件,我們這樣做(DB是我們的DbContext的實例):
var res = new Resource();
db.Resource.Add(res);
var newProfile = new Profile{
ProfileId = res.ResourceId,
IsActive = true
};
db.Profile.Add(newProfile);
不過,我想,我們可以定義我們的類/型號可供資源繼承和獲得更好的效果?
有沒有人用過這樣的數據庫結構?
如果這只是爲了防止重複的主鍵值這是一個**絕對沒用**矯枉過正。 GUID是[非常](http://stackoverflow.com/q/184869/861716)[不太可能](http://stackoverflow.com/q/3138395/861716)被複制。這將是一個沒有任何*好處的持續負擔。 –
也許是這樣,不是我的電話。 :( –