EF表映射错误
本文关键字:错误 映射 EF | 更新日期: 2023-09-27 18:08:39
我遇到了一个错误,试图在我的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和customdatammulti .
这是因为两个实体之间的关系必须有一方是恒定的。
在这种情况下,一个CustomData实体可以有多个 customdatammulti 对象。(列表)。
但是 customdatammulti 是否可以存在而不属于CustomData对象?
你需要做的是改变customdatammulti类,使CustomData的虚拟属性为Required。
见下:-
[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。
没有相关Order的OrderItem是无用的。
Order实体是关系的 principal 端。