2016-11-14 2 views
1


Я новичок в EF (v6.1). Попытка использовать подход Code-First.
Я хотел бы, чтобы столбец Идентификатора был сгенерирован на стороне SQL-сервера (newsequentialid()), однако с возможностью переопределения этих значений. Мой код:EF6.1 newsequentialid с возможностью установки значения вручную

[Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid Id { get; set; } 

Какие результаты в безупречном SQL:

[Id] [uniqueidentifier] NOT NULL DEFAULT (newsequentialid()) 

Однако EF просто игнорирует любое значение, я бы установить на Id имущество и передать нуль в SQL. По существу опрос не будет работать:

MyContext context = new MyContext(); 
MyClass item = new MyClass(); 
Guid id = Guid.NewGuid(); 
item.Id = id; 
context.MyTable.Add(item); 
context.MyTable.Create(); 
context.SaveChanges(); 
Assert.AreEqual(item.Id, id); 

Что делать, чтобы выполнить мою тестовую работу?

+1

Просто создайте второй подкласс DbContext, который отображает «MyClass» (но под псевдонимом) в ту же таблицу без «DatabaseGeneratedOption.Identity». Используйте этот класс для исключительных случаев. –

ответ

1

Если вы хотите установить вручную свой GuidId свойство затем удалить DatabaseGenerated атрибут:

[Key] 
public Guid Id { get; set; } 

Если настроить свойство PK, как Identity, значение будет генерироваться в вашем DB.Also, вы не необходимо отметить это свойство как Required, свойства PK по умолчанию требуются.

+0

Я хотел бы, чтобы он был сгенерирован db, как 99,99% всех времен, однако я хочу, чтобы способность переопределить это поведение. Разве нет? В нормальном SQL (с учетом конфигурации столбца выше) ничто не мешает мне выполнить скрипт ниже, если мне действительно нужно: 'вставить в [MyTable] (Id) значения ('74C17675-6C85-4C79-9C0C-41E1FA4C059D') ' –

+1

Ну, вам нужно будет отключить этот столбец, как личность, делая то, что я предлагаю, и используя переход позже, чтобы изменить вашу db shema. Затем вы должны иметь возможность добавить эту строку с вашим конкретным значением, а на значке снова указать этот столбец как Identity и создать другую миграцию для отката этого столбца как идентификатор – octavioccl

+0

Посмотрите эту ссылку: https://msdn.microsoft.com/ en-us/library/jj591621 (v = vs.113) .aspx – octavioccl

Смежные вопросы