簡體   English   中英

在Entity Framework上創建外鍵關系的問題

[英]Problems creating a Foreign-Key relationship on Entity Framework

我在我的Entity Framework流暢的Api中配置外鍵關系時遇到問題:

以下是報告的負責人:

 public class Testata
{
    public Testata() { Details = new List<Dettaglio>(); }
    public virtual int IDTEST { get; set; }
    public virtual string Value { get; set; }
    public virtual int IDDETAIL { get; set; }
    public virtual string IDTESTALT { get; set; }
    public virtual byte[] BLOB { get; set; }

    public virtual IList<Dettaglio> Details { get; set; }
}

這是報告的細節

public class Dettaglio
{
    public virtual int IDDETAIL { get; set; }
    public virtual int IDTEST { get; set; }
    public virtual string DSDETAIL { get; set; }

    public virtual Testata TEST_TABLE { get; set; }
}

這是我對兩者的流暢API定義。 報告負責人:

public TEST_TABLEMap()
    {
        // Primary Key
        this.HasKey(t => t.IDTEST)
            .Property(t => t.IDTEST)
            .IsRequired()
            .HasColumnType("Int")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .HasColumnName("IDTEST");


        // Table & Column Mappings
        this.ToTable("TEST_TABLE");
        this.Property(t => t.Value).HasColumnName("DSVALUETEST");
        this.Property(t => t.IDTESTALT).HasColumnName("IDTESTALT");
        this.Property(t => t.BLOB).HasColumnName("BLOB");
    }

報告詳情:

public TEST_DETAILMap()
    {
        // Primary Key
        this.HasKey(t => t.DSDETAIL);

        // Properties
        this.Property(t => t.DSDETAIL);

        // Table & Column Mappings
        this.ToTable("TEST_DETAIL");
        this.Property(t => t.IDDETAIL).HasColumnName("IDDETAIL");
        // this.Property(t => t.IDTEST).HasColumnName("IDTEST");
        this.Property(t => t.DSDETAIL).HasColumnName("DSDETAIL");

        // Relationships
        this.HasOptional(t => t.TEST_TABLE)
            .WithMany(t => t.Details)
            .HasForeignKey(d => d.IDDETAIL).WillCascadeOnDelete(true);

    }

在執行時我總是得到這個錯誤

System.Data.Entity.Edm.EdmAssociationType :: Multiplicity與關系'Dettaglio_TEST_TABLE'中Role'Dettaglio_TEST_TABLE_Target'中的引用約束沖突。 由於“從屬角色”中的所有屬性都是不可為空的,因此“主體角色”的多重性必須為“1”。

我猜,這意味着我在外鍵定義方面失敗了,但我真的不知道在哪里看。 非常感謝任何幫助/提示。

您在Dettaglio課程中的外鍵屬性之間存在沖突......

public virtual int IDTEST { get; set; }

...具有非可空類型( int ),因此不能是可選的,你的映射......

this.HasOptional(t => t.TEST_TABLE) //...

...你希望這種關系是可選的。

如果您確實需要可選關系,請使用可空的FK屬性:

public virtual int? IDTEST { get; set; }

否則,您必須使用HasRequired獲取與不可為空的FK屬性的必需關系。

暫無
暫無

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

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