簡體   English   中英

EF 6表映射錯誤

[英]EF 6 table mapping error

嘗試在MVC應用程序中保存一些數據時遇到錯誤。 我們首先使用代碼。

我這樣保存數據:

var fieldDefinition = db.CustomFields
    .FirstOrDefault(x => x.CustomFieldId == thisResp.CustomFieldId);
var newData = new CustomData
{
    ProjectId = new Guid("280288D7-7630-E511-8420-00215E466552"),
    CustomFieldId = thisResp.CustomFieldId
};
if (fieldDefinition.AllowMultiple)
{
    var values = thisResp.Value.Split(',');
    foreach (var thisValue in values)
    {
        var newMulti = new CustomDataMulti
        {
            CustomDataId = newData.CustomDataId,
            CustomValue = thisValue
        };
        db.CustomDataMulti.Add(newMulti);
    }
}

db.CustomData.Add(newData);
db.SaveChanges();

但是,我收到此消息:

無法確定“ PublicationSystem.Model.CustomData_CustomDataMultis”關系的主要結尾。 多個添加的實體可能具有相同的主鍵。

我的課程設置如下:

public partial class CustomData : BaseEntity
{

    [Key]
    public int CustomDataId { get; set; }
    public Guid ProjectId { get; set; }
    public Guid CustomFieldId { get; set; }
    //...
    public virtual ICollection<CustomDataText> CustomDataTexts { get; set; }
    public virtual ICollection<CustomDataMulti> CustomDataMultis { get; set; }
}

CustomDataMapping.cs

public CustomDataMapping()
{
    //Primary key
    HasKey(t => t.CustomDataId);
    //Constraints 
    Property(e => e.CustomValue).IsUnicode(false);
    HasMany(e => e.CustomDataTexts)
        .WithRequired(e => e.CustomData)
        .WillCascadeOnDelete(false);

    HasMany(e => e.CustomDataMultis)
        .WithRequired(e => e.CustomData)
        .WillCascadeOnDelete(false);

    ToTable("CustomData");
}

CustomDataMulti.cs

[Table("CustomDataMulti")]
public partial class CustomDataMulti : BaseEntity
{
    [Key]
    public int CustomDataMultiId { get; set; }

    public int CustomDataId { get; set; }

    [Required]
    [StringLength(150)]
    public string CustomValue { get; set; }

    public virtual CustomData CustomData { get; set; }
}

CustomDataMultiMapping.cs

public CustomDataMultiMapping()
{
    //Primary key
    HasKey(t => t.CustomDataMultiId);

    //Constraints 
    Property(e => e.CustomValue).IsUnicode(false);

    ToTable("CustomDataMulti");
}

我不確定自己在做什么錯。

EntityFramework無法理解以下實體之間關系的主要目的:

CustomData和CustomDataMulti。

這是因為兩個實體之間的關系必須具有恆定的關系的一側。

在這種情況下,一個CustomData實體可以具有多個CustomDataMulti對象。 (列表)。

但是CustomDataMulti是否可以不屬於CustomData對象而存在?

你需要做的是改變CustomDataMulti類,這樣的CustomData為虛擬財產是必需的。

見下文 :-

[Table("CustomDataMulti")]
public partial class CustomDataMulti : BaseEntity
{
    [Key]
    public int CustomDataMultiId { get; set; }

    public int CustomDataId { get; set; }

    [Required]
    [StringLength(150)]
    public string CustomValue { get; set; }

    [Required]
    public virtual CustomData CustomData { get; set; }
}

這是EntityFramework用於確定關系的約定。

舉一個更清晰的例子。

想想一個OrderItem ,一個OrderItem總是屬於一個Order

沒有相關訂單的OrderItem是無用的。

Order實體是關系的主要終點。

希望這可以幫助。

暫無
暫無

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

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