Я делаю миграцию базы данных, используя GORM. Поэтому я определяю структуры и запускаю их с помощью функции GIM AutoMigrate.
type Person struct {
ID string `gorm:"type:varchar(36);primary_key"`
}
err := db.Table("persons").AutoMigrate(&Person{}).Error
type Address struct {
ID string `gorm:"type:varchar(36);primary_key"`
PersonID string `gorm:"column:person_id;type:varchar(36);NOT NULL"`
}
err = db.AutoMigrate(&Address{}).Error
err = db.Model(&Address{}).AddForeignKey("person_id", "persons(id)", "NO ACTION", "CASCADE").Error
type Contact struct {
ID string `gorm:"type:varchar(36);primary_key"`
AddressID null.String `gorm:"column:address_id;type:varchar(36);NOT NULL"`
PersonID string `gorm:"column:person_id;type:varchar(36);NOT NULL"`
}
err = db.AutoMigrate(&Contact{}).Error
err = db.Model(&Contact{}).AddForeignKey("address_id", "addresses(id)", "NO ACTION", "CASCADE").Error
err = db.Model(&Contact{}).AddForeignKey("person_id", "persons(id)", "NO ACTION", "CASCADE").Error
В приведенном выше коде, который является вторым вызовом функции AddForeignKey в таблице контактов, выдает ошибку:
mssql: Could not create constraint or index. See previous errors.
Даже если я перевожу внешний ключ person_id над внешним ключом address_id, внешний ключ address_id не будет работать.
Я использую сервер MS- SQL, используя последнюю настройку контейнера docker (microsoft / ms sql - server- linux: последние). Это что-то относительно именования ограничений. Если да, то как мы можем установить, используя GORM? С My- SQL.
все работает нормально. Было бы очень полезно, если бы я нашел решение. Я не могу запустить необработанные запросы. Миграции должны выполняться только с помощью GORM.
Спасибо