Dans EF6, nous pouvons généralement utiliser cette méthode pour configurer l'entité.
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);
}
}
Comment nous pouvons faire dans EF Core, depuis quand la classe I hérite EntityTypeConfiguration qui ne parvient pas à trouver la classe.
Je télécharge le code source brut d'EF Core à partir du GitHub, je ne le trouve pas. Quelqu'un peut-il aider à ce sujet?
c#
entity-framework-core
Herman
la source
la source
IEntityTypeConfiguration<T>
uniquevoid Configure()
que vous pouvez implémenter. Détails ici: github.com/aspnet/EntityFramework/pull/6989Réponses:
Depuis EF Core 2.0, il existe
IEntityTypeConfiguration<TEntity>
. Vous pouvez l'utiliser comme ceci:Pour en savoir plus sur ceci et sur d'autres nouvelles fonctionnalités introduites dans la version 2.0, cliquez ici .
la source
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
cela pour appliquer toutes les confirgurations personnaliséesVous pouvez y parvenir grâce à quelques types supplémentaires simples:
Usage:
la source
ForSqlServerToTable()
?ToTable
, voir docs.microsoft.com/en-us/ef/core/modeling/relational/tablesentity.Property(c => c.JoinDate).HasColumnType("date");
OnModelCreating
a été mis à jour pour exiger unDbModelBuilder
. Le moyen d'ajouter des configurations à cela est maintenantmodelBuilder.Configurations.Add(new UserConfiguration());
Dans EF7, vous substituez OnModelCreating sur la classe DbContext que vous implémentez.
la source
IEntityMapperStrategy
interface avec unevoid MapEntity(ModelBuilder, Type)
signature etbool IsFor(Type)
. Implémentez l'interface autant ou aussi peu de fois que vous le souhaitez (afin que vous puissiez créer des classes pouvant mapper plusieurs entités si vous le souhaitez), puis créez une autre classe (un fournisseur de stratégie) qui injecte unIEnumerable
de tous lesIEntityMapperStrategies
. Voir ici sous «Types spéciaux». Injectez cela dans votre contexte.Ceci utilise la dernière version actuelle, la version bêta 8. Essayez ceci:
Puis dans votre DbContext:
la source
Vous pouvez utiliser la réflexion pour faire les choses de manière très similaire à la façon dont elles fonctionnent dans EF6, avec une classe de mappage distincte pour chaque entité. Cela fonctionne en RC1 final:
Tout d'abord, créez une interface pour vos types de mappage:
Créez ensuite une classe de mappage pour chacune de vos entités, par exemple pour une
Person
classe:Maintenant, la magie du reflet
OnModelCreating
dans votreDbContext
implémentation:la source
DataContext
et.Where
? J'ai fait un projet séparé pour cela et ne semble pas trouver la référence..Where
estSystem.Linq
,DataContext
est la classe où le code est ajouté (mon EFDbContext
impl)Depuis EF Core 2.2, vous pouvez ajouter toutes les configurations (classes, qui ont implémenté l'interface IEntityTypeConfiguration) dans une ligne dans la méthode OnModelCreating in class, qui est héritée de la classe DbContext
Et, comme cela a été mentionné dans la réponse précédente, depuis EF Core 2.0, vous pouvez implémenter l'interface IEntityTypeConfiguration, configurer la configuration du mappage avec l'utilisation de FluentAPI dans la méthode Configure.
la source
C'est ce que je fais dans un projet sur lequel je travaille actuellement.
Usage:
Dans la méthode OnModelCreating de votre contexte:
Exemple de classe de mappage:
Une autre chose que j'aime faire pour profiter du comportement de pliage de Visual Studio 2015 est pour une entité appelée `` User '', vous nommez votre fichier de mappage `` User.Mapping.cs '', Visual Studio pliera le fichier dans l'explorateur de solutions afin qu'il soit contenu dans le fichier de classe d'entité.
la source
Configure(builder)
n'existait pas en 2016? Avec un léger changement de câblage pour pointer vers TypeConfiguration, il n'est pas nécessaire d'utiliser l'interface «supplémentaire».J'ai terminé avec cette solution:
Exemple d'utilisation:
et
la source
Implémentez simplement IEntityTypeConfiguration
puis ajoutez-le à votre contexte d'entité
la source
Dans ef core, nous devons implémenter IEntityTypeConfiguration au lieu de EntityTypeConfiguration.Dans ce cas, nous avons un accès complet à DbContext modelBuilder et nous pouvons utiliser une API fluide, mais dans ef core, cette API est un peu différente des versions précédentes. vous pouvez trouver plus de détails sur la configuration du modèle ef core sur
https://www.learnentityframeworkcore.com/configuration/fluent-api
la source
Dans Entity Framework Core 2.0:
J'ai pris la réponse de Cocowalla et l'ai adaptée pour la v2.0:
Et il est utilisé dans le DbContext comme ceci:
Et voici comment créer une configuration de type d'entité pour une entité:
la source
Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
class EntityTypeConfigurationBase<TEntity> : IEntityTypeConfiguration<TEntity>
). Vous ne pouvez pas créer une instance de cette classe de base.Ai-je raison?
Je peux passer la configuration:
la source
J'ai suivi une approche similaire à la façon dont Microsoft a implémenté ForSqlServerToTable
en utilisant la méthode d'extension ...
l' indicateur partiel est requis si vous souhaitez utiliser le même nom de classe dans plusieurs fichiers
Ensuite, dans le DataContext OnModelCreating, faites votre appel pour chaque extension ...
De cette façon, nous suivons le même modèle utilisé par les autres méthodes de construction.
Que pensez-vous?
la source
Eh bien, voici le problème de l'amélioration du référentiel EF7 Github: https://github.com/aspnet/EntityFramework/issues/2805
Vous pouvez suivre le problème directement là-bas, bien qu'il ne soit toujours que dans le backlog sans priorité désignée.
la source
J'ai un projet qui vous permet de configurer des entités en dehors de la
DbContext.OnModelCreating
Vous configurez chaque entité dans une classe distincte qui hérite deStaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration
Vous devez d'abord créer une classe qui hérite d'
StaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration<TEntity>
où seTEntity
trouve la classe que vous souhaitez configurer.Ensuite, dans votre classe de démarrage, il vous suffit d'indiquer à Entity Framework où trouver toutes vos classes de configuration lorsque vous configurez votre DbContext.
Il existe également une option pour ajouter des configurations de type à l'aide d'un fournisseur. Le dépôt a une documentation complète sur son utilisation.
https://github.com/john-t-white/StaticDotNet.EntityFrameworkCore.ModelConfiguration
la source