Можно ли сначала определить первичный ключ с учетом регистра SQL в коде структуры сущности? Я знаю, что по умолчанию SQL нечувствителен к регистру, когда дело доходит до строк, просто для того, чтобы быть ясным. Я не хочу изменять определение всей БД на регистр, чувствительный к регистру, только один столбец таблицы (первичный ключ).Определить первичный ключ таблицы SQL как чувствительный к регистру с использованием кода Entity Framework Сначала
Я получаю данные из внешнего API, который посылает данные с учетом регистра первичных ключей («а» и «A» разные записи), я знаю, что я могу изменить их и сохранить их по-разному в моей БД, но это также потребует, чтобы я был уверен в этом везде в моем коде. Это вызывающе возможно, но я бы предпочел просто избежать этого.
В идеале я надеялся найти способ определить свой первичный ключ как чувствительный к регистру через структуру сущности и не используя SQL queries.
Я был бы признателен за любые предложения или, еще лучше, простой способ сделать это.
Update
ОК, так что я довольно много потерял надежду на это время возможно, и теперь, когда я пытаюсь использовать другой подход, который:
public ovveride Up()
{
// drops the existing primary key named PK_dbo.Urls
Sql("ALTER TABLE dbo.Urls DROP CONSTRAINT [PK_dbo.Urls]");
// change the collation
Sql("ALTER TABLE dbo.Urls ALTER COLUMN Url VARCHAR(10) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL");
// re-add the primary key to the Url column
Sql("ALTER TABLE dbo.Urls ADD CONSTRAINT [PK_dbo.ShortUrls] PRIMARY KEY (Url)");
}
я не могу действительно переживают это, поскольку у меня есть 4 разных ограничения на это поле (первичный ключ + 3 других).
Я не хочу самостоятельно переписывать код ограничения. Могу ли я использовать свободный API для внесения изменений с учетом регистра?
Это автоматически сгенерированный код свободно API:
CreateTable(
"dbo.Shapes",
c => new
{
TabID = c.Int(nullable: false),
Lbl = c.String(nullable: false, maxLength: 128),
wasRemoved = c.Boolean(nullable: false),
})
.PrimaryKey(t => new { t.TabID, t.Lbl })
.ForeignKey("dbo.Tabs", t => t.TabID, cascadeDelete: true)
.Index(t => t.TabID);
Я был бы очень признателен решение, так как я застрял на этом на некоторое время теперь, и я ищу лучшие худшие сейчас.
Update 2
Я также нашел 2-й способ это сделать, это полностью автоматический, а после того, как вы определяете множество других вещей, так или иначе он использует аннотацию пользовательских данных. см. мой ответ ниже для получения дополнительной информации.
Вы используете миграцию? – DavidG
Да, что вы предлагаете? – LiranBo