我在尝试在我的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");
}
我不确定我做错了什么。
答案 0 :(得分:1)
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 将始终属于订单。
没有相关订单的 OrderItem 是没用的。
订单实体是该关系的 prinicpal 结尾。
希望这有帮助。