EF 6表映射错误

肯尼恩二世

尝试在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是无用的。

订单实体是prinicpal关系的结束。

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章