it-swarm.com.de

Nullable-Eigenschaft für Entitätsfeld, Entity Framework durch Code First

Verwenden Sie die Datenanmerkung Required wie folgt:

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

Wird eingestellt ein Feld zu Not Null in der Datenbank, Wie kann ich einstellen ein Feld Um NULL-Werte zuzulassen, habe ich versucht, es über SQL Server Management Studio festzulegen, aber Entity Framework setzte es wieder aufNot Null.

58
chrisramon

Lassen Sie einfach das [Required] -Attribut in der string somefield-Eigenschaft aus. Dadurch wird eine NULLable-Spalte in der Datenbank erstellt.

Damit int-Typen NULL in der Datenbank zulassen, müssen sie im Modell als nullfähige Ints deklariert werden:

// 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; }
91
danludwig

Die andere Option besteht darin, EF mitzuteilen, dass die Spalte null sein darf:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();            
        base.OnModelCreating(modelBuilder);
}

Dieser Code sollte sich in dem Objekt befinden, das von DbContext erbt.

28
Jon

Jons Antwort funktionierte nicht für mich, da ich einen Compilerfehler erhielt CS0453 C # Der Typ muss ein nicht-nullwertbarer Werttyp sein, um ihn als Parameter 'T' im generischen Typ oder der generischen Methode verwenden zu können.

Das hat aber für mich funktioniert:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeObject>().HasOptional(m => m.somefield);
    base.OnModelCreating(modelBuilder);
}
3
Jon

In Ef .net core gibt es zwei Optionen, die Sie ausführen können. zuerst mit Datenanmerkungen: 

public class Blog
{
    public int BlogId { get; set; }
    [Required]
    public string Url { get; set; }
}

Oder mit fließendem api:

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Url)
            .IsRequired(false)//optinal case
            .IsRequired()//required case;
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

Es gibt mehr Details hier

0
nzrytmn