Неверное свойство для поля объекта, Entity Framework через код First
Использование аннотации данных Required
следующим образом:
[Required]
public int somefield {get; set;}
Будет установлен somefield в Not Null
в базе данных, как я могу установить somefield
чтобы разрешить NULL?, я попытался установить его через SQL Server Management Studio, но Entity Framework вернул его к Not Null
.
Ответы
Ответ 1
Просто опустите атрибут [Обязательный] из свойства string somefield
. Это приведет к созданию столбца NULL
able в db.
Чтобы сделать типы int, допускающие NULL в базе данных, они должны быть объявлены как нулевые int в модели:
// an int can never be null, so it will be created as NOT NULL in db
public int someintfield { get; set; }
// to have a nullable int, you need to declare it as an int?
// or as a System.Nullable<int>
public int? somenullableintfield { get; set; }
public System.Nullable<int> someothernullableintfield { get; set; }
Ответ 2
Другой вариант - указать EF, чтобы столбец был нулевым:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();
base.OnModelCreating(modelBuilder);
}
Этот код должен находиться в объекте, который наследуется от DbContext
.
Ответ 3
Ответ Jon не работал у меня, поскольку у меня возникла ошибка компилятора CS0453 С# Тип должен быть невообразимым типом значения, чтобы использовать его как параметр 'T' в родовом типе или методе
Это сработало для меня:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeObject>().HasOptional(m => m.somefield);
base.OnModelCreating(modelBuilder);
}
Ответ 4
В Ef.net core есть две опции, которые вы можете сделать; Сначала с аннотациями данных:
public class Blog
{
public int BlogId { get; set; }
[Required]
public string Url { get; set; }
}
Или с беглым API:
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Url)
.IsRequired();
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
}
Есть более подробная информация здесь