Изменение имени столбца в EF принудительно переносит (даже с атрибутом Column) - PullRequest
0 голосов
/ 03 октября 2018

Я создал несколько классов в C # с использованием подхода, основанного на базе данных, и в настоящее время я делаю рефакторинг этих классов, чтобы сделать имена более удобочитаемыми для человека.

Однако изменение имени свойства и применение оригинала вColumnAttribute все еще вызывает миграцию.

Это, кажется, применимо, когда я переименовываю составные ключи, на которые ссылаются другие сущности / таблицы.

Например, изменив это:

    [Key]
    [Column("SCHED_NAME", Order = 0)]
    [StringLength(120)]
    public string SCHED_NAME { get; set; }

to:

    [Key]
    [Column("SCHED_NAME", Order = 0)]
    [StringLength(120)]
    public string SchedulerName { get; set; }

создает миграцию, подобную этой:

        DropForeignKey("dbo.QRTZ_TRIGGERS", new[] { "SCHED_NAME", "JOB_NAME", "JOB_GROUP" }, "dbo.QRTZ_JOB_DETAILS");
        CreateTable(
            "dbo.QRTZ_TRIGGERS",
            c => new
                {
                    SCHED_NAME = c.String(nullable: false, maxLength: 120),
                    TRIGGER_NAME = c.String(nullable: false, maxLength: 150),
                    TRIGGER_GROUP = c.String(nullable: false, maxLength: 150),
                    JOB_NAME = c.String(nullable: false, maxLength: 150),
                    JOB_GROUP = c.String(nullable: false, maxLength: 150),
                    DESCRIPTION = c.String(maxLength: 250),
                    NEXT_FIRE_TIME = c.Long(),
                    PREV_FIRE_TIME = c.Long(),
                    PRIORITY = c.Int(),
                    TRIGGER_STATE = c.String(nullable: false, maxLength: 16),
                    TRIGGER_TYPE = c.String(nullable: false, maxLength: 8),
                    START_TIME = c.Long(nullable: false),
                    END_TIME = c.Long(),
                    CALENDAR_NAME = c.String(maxLength: 200),
                    MISFIRE_INSTR = c.Int(),
                    JOB_DATA = c.Binary(),
                })
            .PrimaryKey(t => new { t.SCHED_NAME, t.TRIGGER_NAME, t.TRIGGER_GROUP })
            .ForeignKey("dbo.QRTZ_JOB_DETAILS", t => new { t.SCHED_NAME, t.JOB_NAME, t.JOB_GROUP });

        CreateTable(
            "dbo.QRTZ_JOB_DETAILS",
            c => new
                {
                    SCHED_NAME = c.String(nullable: false, maxLength: 120),
                    JOB_NAME = c.String(nullable: false, maxLength: 150),
                    JOB_GROUP = c.String(nullable: false, maxLength: 150),
                    DESCRIPTION = c.String(maxLength: 250),
                    JOB_CLASS_NAME = c.String(nullable: false, maxLength: 250),
                    IS_DURABLE = c.Boolean(nullable: false),
                    IS_NONCONCURRENT = c.Boolean(nullable: false),
                    IS_UPDATE_DATA = c.Boolean(nullable: false),
                    REQUESTS_RECOVERY = c.Boolean(nullable: false),
                    JOB_DATA = c.Binary(),
                })
            .PrimaryKey(t => new { t.SCHED_NAME, t.JOB_NAME, t.JOB_GROUP });

        DropTable("dbo.QRTZ_TRIGGERS");
        DropTable("dbo.QRTZ_JOB_DETAILS");
    }

Оператор CreateTable идентичен исходному.

Любойидеи, почему это происходит?

1 Ответ

0 голосов
/ 03 октября 2018

Если вы хотите, чтобы в вашем приложении появлялись удобочитаемые имена, вам нужно изменить имена внутри атрибута Column ().То, что вы пытаетесь сделать выше, это изменение фактических имен столбца.Проверьте ниже, как я изменил имя на желаемое имя в атрибуте Column (), но сохранил оригинальное имя таким, как оно есть -

[Key]
[Column("SchedulerName", Order = 0)]
[StringLength(120)]
public string SCHED_NAME { get; set; }
...