Home > Enterprise >  Entity Framework 6 - make Value type properties optional in bulk without making them nullable in dom
Entity Framework 6 - make Value type properties optional in bulk without making them nullable in dom

Time:09-30

So I'm transferring domain classes (a lot) to the postgres with EF6. Classes can have value type properties, like int and float, and are being transferred to postgres as NOT NULL.

I can't make my domain classes properties nullable, as it could break business logic.

I saw this approach - make props optional

but this means that I have to manually do this in OnModelCreating in my dbcontext for every class I Have, right?

So, is there any way to make value types (for all my domain classes) nullable in database, like, at initial migration (or any other way in bulk) - so I dont have to manually specify it in OnModelCreating for every class I have? Maybe it is possible with some custom convention for it?

tldr - I want to make evey value type property of every class nullable in database with ef6, without making it nullable in domain itself

Thanks!

CodePudding user response:

There is a DbModelBuilder.Properties() method.

It can be used to set the necessary values for all properties in the OnModelCreating method.

modelBuilder.Properties().Configure(p => p.IsOptional());

However, this will change all properties. Of course, there is no need to change the primary keys and some other columns. Therefore, they need to be filtered out.

modelBuilder.Properties().Where(p => p.Name != "Id").Configure(p => p.IsOptional());

Or something like that:

modelBuilder.Properties().Where(p => p.Name.EndsWith("Id")).Configure(p => p.IsOptional());

CodePudding user response:

Did you try in your Domain classes ? Nullable value types

public class Book
{
    public int ID { get; set; }
    public double? Price { get; set; }
}
  • Related