从枚举播种-主键重复错误

时间:2018-12-21 22:12:34

标签: c# entity-framework enums seed

我已经遵循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事情。

1 个答案:

答案 0 :(得分:0)

我在手头here上找到了几个答案。我设法实施并正常工作!