I’m trying to configure my EF Core. I want to DRY and reuse code. Therefore I created a simple method to filter out all of the properties of all entity types in my model:
public List<IMutableProperty> GetProperties(ModelBuilder modelBuilder, Func<IProperty, bool> filter)
{
var properties = modelBuilder.Model
.GetEntityTypes()
.SelectMany(t => t.GetProperties())
.ToList()
.Where(filter) // This line causes that error
.ToList();
return properties;
}
But I get this error:
error CS0311: The type ‘Microsoft.EntityFrameworkCore.Metadata.IProperty’ cannot be used as type parameter ‘TRow’ in the generic type or method ‘TypedTableBaseExtensions.Where(TypedTableBase, Func<TRow, bool>)’. There is no implicit reference conversion from ‘Microsoft.EntityFrameworkCore.Metadata.IProperty’ to ‘System.Data.DataRow’.
Here’s how I intend to use it:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
ConfigureTenants(modelBuilder);
ConfigureLocales(modelBuilder);
ConfigureKeys(modelBuilder);
ConfigureGuids(modelBuilder);
ConfigureSlugs(modelBuilder);
ConfigureOrders(modelBuilder);
ConfigRelatedItems(modelBuilder);
}
public void ConfigureTenants(ModelBuilder modelBuilder)
{
var properties = GetProperties(modelBuilder, p => p.ClrType == typeof(string) && p.Name == "Tenant");
properties.ForEach(p => p.SetDefaultValue("'main'"));
}
public void ConfigureLocales(ModelBuilder modelBuilder)
{
var properties = GetProperties(modelBuilder, p => p.ClrType == typeof(string) && p.Name == "Locale");
properties.ForEach(p => p.SetDefaultValue("'en'"));
}
Why do I get that error? What does this code has to do with TRow
at all?