我已经遵循this问题的可接受的答案,并且一切工作都很好……我从初始化器中重写的Seed函数使用我的Enum值生成了表。但是,当我随后将其他代码添加到种子函数中以利用枚举填充另一个表时,我发现它试图将(使用的枚举)重新插入到新的基于枚举的表中,从而导致主键验证错误。这是我正在使用的枚举:
public enum ComponentTypeEnum
{
template,
section,
header,
footer,
body,
label,
text,
image,
TOC,
Table,
TableColumn,
TableRow,
TableCell,
List
};
,我有一个对应的类叫做ComponentType:
public class ComponentType
{
private ComponentType(ComponentTypeEnum @enum)
{
Id = (int)@enum;
Name = @enum.ToString();
}
protected ComponentType()
{
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
[Required, MaxLength(100)]
public string Name { get; set; }
public static implicit operator ComponentType(ComponentTypeEnum @enum) => new ComponentType(@enum);
public static implicit operator ComponentTypeEnum(ComponentType faculty) => (ComponentTypeEnum)faculty.Id;
}
在初始化器中,我有以下内容:
protected override void Seed(DocumentPDFDbContext context)
{
context.ComponentType.SeedEnumValues<ComponentType, ComponentTypeEnum>(@enum => @enum);
context.SaveChanges();
var testItems = new List<ItemData>
{
new ItemData{Id = 1, ParentId = null, ComponentType = ComponentTypeEnum.template, Content = null, SortOrder = 1,},
new ItemData{Id = 2, ParentId = 1, ComponentType = ComponentTypeEnum.section, Content = null, SortOrder = 1,},
};
testItems.ForEach(t => context.ItemData.Add(t));
context.SaveChanges();
}
在我添加testItem代码之前,它工作正常并通过Enum生成了我的查找表,添加了上述testItems代码之后,它似乎试图重新插入数据中包含的ComponentTypeEnum中的任何一个。
我希望这只是我不知道的简单的EF事情。