Я использую Asp.net mvc 5 и EF 6 для создания веб-приложения. Я начал с шаблоном интернет-приложений и добавлены такие классы:Entity Framework 6 Guid генерирует null?
public class Article
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
public string Tags { get; set; }
public string Name { get; set; }
public string Link { get; set; }
public string HtmlContent { get; set; }
[ForeignKey("ListaId")]
public Lista Lista { get; set; }
public Guid ListaId { get; set; }
}
public class List
{
public string Name { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
public int Status { get; set; }
public virtual ApplicationUser User { get; set; }
public string ApplicationUserId { get; set; }
public string Tags { get; set; }
}
Но каждый раз, когда NuGet менеджер пакетов обновляет БД и запускает метод Seed, он ломает при попытке вставить статью в БД. вот метод семян в configuration.cs
context.Lists.AddOrUpdate(new Lista
{
Name = "Technology",
ApplicationUserId = "f06b0d2e-2088-4cd7-8b1c-4fcad5619f3c",
Status = 1,
Tags = "Tech,News"
});
context.SaveChanges();
Lista l1 = context.Lists.Where(x => x.Status == 1).First();
context.Articles.AddOrUpdate(new Article
{
ListaId = l1.ID,
Link = "www.abc.com",
Name = "ABC",
Tags = "c,test",
HtmlContent = "Hello World"
});
context.SaveChanges(); //here it breaks
внутреннее исключение: System.Data.SqlClient.SqlException: Не удается вставить значение NULL в столбец 'ID', таблица «Сеть САШ-WebAPP-20141022011020.dbo. Статьи; столбец не допускает нулей. INSERT не работает Я получаю ту же ошибку, если я принимаю [Key] adnotation из класса Article, и если я использую adnotation [DatabaseGenerated (DatabaseGeneratedOption.Identity)], я получаю следующую ошибку: System.Data.SqlClient.SqlException: Нарушение ограничения PRIMARY KEY «PK_dbo.Articles». Невозможно вставить дубликат ключа в объект «dbo.Arts». Значение дублирующегося ключа: (00000000-0000-0000-0000-000000000000). С long/int в месте Guid я получаю ошибку update-database, например: uniqueidentifier несовместим с bigint/int.
Что я могу сделать? Почему он не генерирует правильный идентификатор с guid?
жаль ... добавить NEWSEQUENTIALID(), где? –
@CristianDan; вы можете попробовать запустить этот SQL-запрос в своей базе данных: 'ALTER TABLE dbo.TableName ADD CONSTRAINT DF_ColumnName DEFAULT newsequentialid() FOR ColumnName', замените имена на столбец таблицы/идентификатора. –
Большое спасибо .. он работает ... Я узнал, где написать newsequentialid(): D thanks –