Подтвердить что ты не робот

Неверное свойство для поля объекта, Entity Framework через код First

Использование аннотации данных Required следующим образом:

[Required]
public int somefield {get; set;}

Будет установлен somefield в Not Null в базе данных, как я могу установить somefield чтобы разрешить NULL?, я попытался установить его через SQL Server Management Studio, но Entity Framework вернул его к Not Null.

4b9b3361

Ответ 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; }
}

Есть более подробная информация здесь