В EF6 мы обычно можем использовать этот способ настройки Entity.
public class AccountMap : EntityTypeConfiguration<Account>
{
public AccountMap()
{
ToTable("Account");
HasKey(a => a.Id);
Property(a => a.Username).HasMaxLength(50);
Property(a => a.Email).HasMaxLength(255);
Property(a => a.Name).HasMaxLength(255);
}
}
Как мы можем это сделать в EF Core, поскольку, когда класс Inherit EntityTypeConfiguration не смог найти класс.
Я скачиваю исходный код EF Core с GitHub, но не могу его найти. Может кто-нибудь помочь в этом?
c#
entity-framework-core
Герман
источник
источник
IEntityTypeConfiguration<T>
с одним,void Configure()
который вы можете реализовать. Подробности здесь: github.com/aspnet/EntityFramework/pull/6989Ответы:
Начиная с EF Core 2.0 существует
IEntityTypeConfiguration<TEntity>
. Вы можете использовать это так:Подробнее об этой и других новых функциях, представленных в версии 2.0, можно прочитать здесь .
источник
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
ее, чтобы применить все пользовательские подтвержденияВы можете добиться этого с помощью нескольких простых дополнительных типов:
Использование:
источник
ForSqlServerToTable()
?ToTable
, см. Docs.microsoft.com/en-us/ef/core/modeling/relational/tablesentity.Property(c => c.JoinDate).HasColumnType("date");
OnModelCreating
был обновлен, чтобы требоватьDbModelBuilder
. Теперь можно добавить конфигурации к этомуmodelBuilder.Configurations.Add(new UserConfiguration());
В EF7 вы переопределяете OnModelCreating в классе DbContext, который вы реализуете.
источник
IEntityMapperStrategy
интерфейс сvoid MapEntity(ModelBuilder, Type)
подписью иbool IsFor(Type)
. Реализуйте интерфейс столько раз, сколько хотите (чтобы вы могли создавать классы, которые могут отображать более одной сущности, если хотите), а затем создайте другой класс (поставщик стратегии), который вводитIEnumerable
всеIEntityMapperStrategies
. См. Здесь в разделе «Особые типы». Внесите это в свой контекст.Используется последняя, бета-версия 8. Попробуйте следующее:
Затем в вашем DbContext:
источник
Вы можете использовать отражение, чтобы делать что-то очень похоже на то, как они работают в EF6, с отдельным классом сопоставления для каждой сущности. Это работает в финале RC1:
Сначала создайте интерфейс для ваших типов сопоставления:
Затем создайте класс сопоставления для каждой из ваших сущностей, например, для
Person
класса:Теперь магия отражения
OnModelCreating
в вашейDbContext
реализации:источник
DataContext
и.Where
? Я сделал для этого отдельный проект и, похоже, не нашел ссылки..Where
isSystem.Linq
,DataContext
это класс, в который добавлен код (мой EFDbContext
impl)Начиная с EF Core 2.2 вы можете добавлять все конфиги (классы, реализующие интерфейс IEntityTypeConfiguration) одной строкой в методе OnModelCreating в классе, который наследуется от класса DbContext.
И, как было упомянуто в предыдущем ответе, начиная с EF Core 2.0, вы можете реализовать интерфейс IEntityTypeConfiguration, настроить конфигурацию сопоставления с помощью FluentAPI в методе Configure.
источник
Это то, что я делаю в проекте, над которым сейчас работаю.
Использование:
В методе OnModelCreating вашего контекста:
Пример класса сопоставления:
Еще одна вещь, которую я хотел бы сделать, чтобы воспользоваться поведением сворачивания Visual Studio 2015, - это сущность с именем 'User', вы называете свой файл сопоставления 'User.Mapping.cs', Visual Studio свернет файл в проводнике решений. так что он содержится в файле класса сущности.
источник
Configure(builder)
не существовало в 2016 году? После небольшого изменения проводки, указывающего на TypeConfiguration, нет необходимости в «дополнительном» интерфейсе.Я закончил с этим решением:
Образец использования:
и
источник
Просто реализуйте IEntityTypeConfiguration
а затем добавьте его в свой объект Context
источник
В ядре ef мы должны реализовать IEntityTypeConfiguration вместо EntityTypeConfiguration, в этом случае у нас есть полный доступ к DbContext modelBuilder, и мы можем использовать свободный API, но в ядре EF этот API немного отличается от предыдущих версий. вы можете найти более подробную информацию о конфигурации базовой модели ef на
https://www.learnentityframeworkcore.com/configuration/fluent-api
источник
В Entity Framework Core 2.0:
Я взял ответ Cocowalla и адаптировал его для версии 2.0:
И он используется в DbContext следующим образом:
И вот как вы создаете конфигурацию типа сущности для сущности:
источник
Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
class EntityTypeConfigurationBase<TEntity> : IEntityTypeConfiguration<TEntity>
). Вы не можете создать экземпляр этого базового класса.Я прав?
Я могу передать конфиг:
источник
Я использовал аналогичный подход к тому, как Microsoft реализовала ForSqlServerToTable.
используя метод расширения ...
частичный флаг требуется , если вы хотите использовать то же имя класса в нескольких файлах
Затем в DataContext OnModelCreating вызовите каждое расширение ...
Таким образом, мы следуем той же схеме, что и другие методы построения.
Что ты думаешь?
источник
Вот проблема для улучшения репозитория EF7 Github: https://github.com/aspnet/EntityFramework/issues/2805
Вы можете отслеживать проблему прямо там, хотя она все еще находится в очереди без назначенного приоритета.
источник
У меня есть проект, который позволяет вам настраивать сущности за пределами.
DbContext.OnModelCreating
Вы настраиваете каждую сущность в отдельном классе, который наследуется отStaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration
Прежде всего , необходимо создать класс , который наследует от
StaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration<TEntity>
гдеTEntity
есть класс , который вы хотите настроить.Затем в своем классе Startup вам просто нужно указать Entity Framework, где найти все классы конфигурации, когда вы настраиваете свой DbContext.
Также существует возможность добавления конфигураций типов с помощью провайдера. В репо есть полная документация по его использованию.
https://github.com/john-t-white/StaticDotNet.EntityFrameworkCore.ModelConfiguration
источник