簡體   English   中英

StarSchema - 實體框架核心 - 遷移

[英]StarSchema - Entity Framework Core - Migration

我正在嘗試使用代碼優先方法(星型模式)構建數據倉庫(DWH):

事實/維度類:

    [Table("FactBase")]
    public class FactBase
    {
        [Key]
        public Guid Id { get; set; }

        [ForeignKey("DimTest1")]
        public string DimDigitalesBuchISBN { get; set; }

        public virtual DimTest1 DimTest1 { get; set; }  
    }


    [Table("DimTest1")]
    public class DimTest1
    {
        [Key]
        public string ISBN { get; set; }

        public string Bla { get; set; }
    }

語境:

public class XDBContextDWH : DbContext
{      
    public DbSet<FactBase> FactBase { get; set; }
    public DbSet<DimTest1> DimTest1 { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(new string("connection string"));
    }
}   

使用遷移后,架構如下所示:

這里

基於那個星模式,不應該是這樣的關系(這里: SQL )嗎?

這里

當您指定屬性[ForeignKey("DimTest1")]時,您是在告訴 EF 使用DimTest1作為FactBase class 的導航屬性,而不是指向DimTest1 class。

但由於該屬性不存在,因此它不會創建關系。

將您的 class 更改為:

[Table("FactBase")]
public class FactBase
{
    [Key]
    public Guid Id { get; set; }

    [ForeignKey("DimTest1")]
    public string DimDigitalesBuchISBN { get; set; }
    public virtual DimTest1 DimTest1 { get; set; } // navigation property
}

這應該使它按預期工作。

正如您所暗示的那樣,星型模式事實表應該使用由它引用的外鍵組成的復合鍵。 所以我想說你的情況有幾個問題需要解決。 首先,事實表可能不應該有一個名為 Id 的列,盡管它不會真正傷害任何東西,它可能永遠不會用於查詢,所以您只是添加了占用磁盤空間的額外數據。 其次,您可能正在尋找的答案是,如果您想要事實表上的復合主鍵,您需要在數據庫上下文中指定它。


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<FactBase>()
        .HasKey(x => new { x.Id, x.DimDigitalesBuchISBN });
}

正如我所提到的,您可能不想在您的 PK 中包含 Fact.Id 列,而是您會引用多個這樣的維度:


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<FactBase>()
        .HasKey(x => new { x.Dim1Id, x.Dim2Id, x.Dim3Id});
}

其中 Dim1Id、Dim2Id 和 Dim3Id 是維度的主鍵。 我還應該提到,您需要從 FactBase class 的 Id 字段中刪除 [Key] 屬性。

參考: https://docs.microsoft.com/en-us/ef/core/modeling/keys?tabs=data-annotations

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM