簡體   English   中英

映射一個到多個復合密鑰實體框架5

[英]Map one to many composite key Entity framework 5

我正在映射我的實體,但是當我試圖回到實體而沒有關系的例子時,我有一個名為Medicamento的實體,它有很多定義,但只是得到葯劑的屬性而沒有關系白衣定義。

我的第三個表我有一個復合鍵我的代碼是:

MedicamentoMap

public class MedicamentoMap : EntityTypeConfiguration<Medicamento>
{
    public MedicamentoMap()
    {
        // primaryKey
        this.HasKey(m => m.Id);

        // propiedades
        this.ToTable("Medicamento");
        this.Property(m => m.Id).HasColumnName("MedicamentoID");
        this.Property(m => m.Descripcion).HasColumnName("Descripcion");

        //Relaciones        
        this.HasMany(p => p.Presentaciones) 
            .WithMany() 
            .Map(m => 
                { 
                    m.ToTable("MedicamentoPresentacion")
                    m.MapLeftKey("MedicamentoID"); 
                    m.MapRightKey( "PresentacionID"); 
                });  
     }
}

權利定義是:

public PresentacionMap()
{
    // primaryKey
    this.HasKey(m => m.Id);

    // propiedades
    this.ToTable("Presentacion");
    this.Property(m => m.Id).HasColumnName("PresentacionID");
    this.Property(m => m.Descripcion).HasColumnName("Descripcion"); 
}

最后第三個實體是葯物現象,是:

public MedicamentoPresentacionMap()
{
    // primaryKey
    this.HasKey(i => new {i.MedicamentoID, i.PresentacionID});
    this.Property(i => i.CodigodeBarras);
    this.ToTable("MedicamentoPresentacion");
    this.Property(i => i.MedicamentoID).HasColumnName("MedicamentoID");
    this.Property(i => i.PresentacionID).HasColumnName("PresentacionID");
    this.Property(i => i.CodigodeBarras).HasColumnName("CodigoBarras");
}

您不能同時擁有多對多定義( HasMany...WithMany )和類模型中的可見聯結類( MedicamentoPresentacion )。

您必須刪除多對多映射,因為您的聯結表不是聯結表(這是一個只包含兩個外鍵的表)。 您的聯結類還包含條形碼(我認為),因此它在業務領域具有意義,它應該是模型的一部分。

所以刪除HasMany...WithMany部分,並掛在MedicamentoPresentacionMap MedicamentoPresentacion都應該有一個收集屬性MedicamentoPresentacions (這使得它成為1-n-1關聯)。

暫無
暫無

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

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