实体框架自定义注释

时间:2016-12-16 09:36:48

标签: c# asp.net-mvc entity-framework entity-framework-6

好吧,我试图像a tutorial by Milinaudara中所解释的那样为EF 6实现自定义注释,因为它是我发现的第一个谷歌搜索。该教程非常容易理解。但是,在我运行第一次迁移后,我似乎需要在列上添加[CaseSensitive]注释 - creating table - 并且[CaseSensitive]将在第二次迁移时实际执行Generate(CreateTableOperation createTableOperation) 3}}操作。我错了吗?因为这是我迄今为止所经历的......

是否可以在创建表格时运行该注释?我应该覆盖EF的[CaseSensitive]方法以确保实际应用view注释吗?

1 个答案:

答案 0 :(得分:0)

Generate(AlterColumnOperation alterColumnOperation)仅在模型更改时被调用,并且永远不会在创建表或添加新列时被触发 - 也许这很明显,但教程没有提到它..至少每个方法的背景故事会更好..我最终会覆盖Generate(AddColumnOperation addColumnOperation)Generate(CreateTableOperation createTableOperation)所以它看起来像:

    protected override void Generate(AddColumnOperation addColumnOperation)
    {
        //add the column
        base.Generate(addColumnOperation);

        //alter the column
        this.Generate(new AlterColumnOperation(addColumnOperation.Table, addColumnOperation.Column, false));
    }

    protected override void Generate(CreateTableOperation createTableOperation)
    {
        //add the column
        base.Generate(createTableOperation);

        //alter the column
        foreach(ColumnModel column in createTableOperation.Columns)
        {
            this.Generate(new AlterColumnOperation(createTableOperation.Name, column, false));
        }
    }

虽然我知道我们永远不应该假设每个alter操作都是安全的..所以,在构造false时传递AlterColumnOperation可能是个坏主意。