Bonjour J'utilise le code Entity Framework uniquement à partir de CTP4. Ma question est la suivante: étant donné le nom d'une classe de domaine qui est mappée à l'aide d'une EntityConfiguration, comment puis-je récupérer le nom de la table pour la classe mappée à l'exécution? Je suppose que j'ai besoin d'utiliser MetadataWorkspace sur ObjectContext, mais j'ai du mal à obtenir la documentation à jour. Toute aide ou liens seraient grandement appréciés. Merci.Entity Framework 4 Code uniquement Obtenir le nom de la table à partir de MetaData pour l'objet de domaine POCO
4
A
Répondre
1
Oui, vous avez raison, toutes les informations de mappage ont pu être récupérées via MetadataWorkspace.
est sous le code de retireve noms de table et schéma pour Product
classe:
public class Product
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class ProductConfiguration : EntityTypeConfiguration<Product>
{
public ProductConfiguration()
{
HasKey(e => e.Id);
Property(e => e.Id)
.HasColumnName(typeof(Product).Name + "Id");
Map(m =>
{
m.MapInheritedProperties();
m.ToTable("ProductsTable");
});
Property(p => p.Name)
.IsRequired()
.IsUnicode();
}
}
public class Database : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProductConfiguration());
}
public DbSet<Product> Products { get; set; }
}
Maintenant, pour récupérer le nom de table pour Product
classe, vous devez créer DbContext et utiliser le code suivant:
using(var dbContext = new Database())
{
var adapter = ((IObjectContextAdapter)dbContext).ObjectContext;
StoreItemCollection storageModel = (StoreItemCollection)adapter.MetadataWorkspace.GetItemCollection(DataSpace.SSpace);
var containers = storageModel.GetItems<EntityContainer>();
EntitySetBase productEntitySetBase = containers.SelectMany(c => c.BaseEntitySets.Where(bes => bes.Name == typeof(Product).Name)).First();
// Here are variables that will hold table and schema name
string tableName = productEntitySetBase.MetadataProperties.First(p => p.Name == "Table").Value.ToString();
string schemaName = productEntitySetBase.MetadataProperties.First(p => p.Name == "Schema").
}
Je doute que ce soit une solution parfaite mais comme je l'ai déjà utilisé et cela a fonctionné sans problèmes.
Questions connexes
- 1. Entity Framework 4 code seul nom de colonne de référence
- 2. Entity Framework 4 POCO - Lazy + Désireuse Loading
- 3. Entity Framework 4 préfixe de nom de table
- 4. Entity Framework 4 - Modèle POCO - T4
- 5. Entity Framework 4 POCO avec Dictionnaire
- 6. Entity Framework Objets POCO
- 7. Mappage de POCO personnalisé dans Entity Framework 4
- 8. Avantages du modèle Code uniquement dans Entity Framework 4?
- 9. Entity Framework + POCO
- 10. Entity-Framework EntityConnection MetaData Problème
- 11. Entity framework 4 POCO comment mettre à jour une entité?
- 12. Entity Framework, code uniquement & EntityDataSource
- 13. Entity Framework 4, définition de la relation
- 14. dynamique Fetch un héritage dans Entity Framework 4 POCO
- 15. Mappage POCO sur Entity dans Entity Framework
- 16. Entity Framework 4 avec modèle de domaine existant
- 17. Entity Framework v4 Chaîne de connexion de code uniquement
- 18. IQueryable Entity Framework Mappages POCO
- 19. POCO + Entity Framework avec le modèle référentiel - autorisation de manipulation
- 20. héritage avec des entités POCO dans Entity Framework 4
- 21. Entity Framework 4.0 - Code uniquement Référence
- 22. Entity Framework 4 Conventions
- 23. Obtenir le dernier ID de la table [Entity Framework]
- 24. Entity Framework 4 Code First et new() Opérateur
- 25. Entity Framework 4 - Associations
- 26. Entity Framework 4, SQLCe avec le problème POCO sur la suppression
- 27. Entity Framework 4 entités POCO dans un assemblage séparé, site Web de données dynamiques?
- 28. Entity Framework 4.0 rapport de mise à jour POCO
- 29. Entity Framework 4: Le MDF fantôme
- 30. Entity Framework 4 Code Première mappage de table personnalisé question API Courant