public void AddEntityListener() { var dbConnection = Effort.DbConnectionFactory.CreateTransient(); string testListenerFqtn = typeof(TestListener).AssemblyQualifiedName; // Prerequisite : Adding listener using (var metadataContext = new MetadataInitializationContext(dbConnection, false)) { var entity = metadataContext.Entities .Where(e => e.Name == "Entity") .Single(); var listener = new Kelpie.Initialization.Metadata.Models.Listener() { FullyQualifiedTypeName = testListenerFqtn, Entity = entity, }; metadataContext.Listeners.Add(listener); metadataContext.SaveChanges(); } using (var context = Context.New(dbConnection)) { context.ProxySet <IListener>() .Where(i => i.FullyQualifiedTypeName == testListenerFqtn) .Single(); var entity = context.Create <IEntity>(); entity.Name = "This name must be altered"; context.ProxySet <IEntity>() .Add(entity); context.SaveChanges(); Assert.AreEqual(entity.Name, "ModifiedByTestListener"); context.ProxySet <IEntity>() .Where(e => e.Name == "ModifiedByTestListener").Single(); context.ProxySet <IAttribute>() .Where(e => e.Name == "AttributeCreatedByTestListener" && e.Entity.Id == entity.Id) .Single(); } }
static IEnumerable <Type> CreateEntitiesTypes(DbConnection existingConnection) { using (MetadataInitializationContext context = new MetadataInitializationContext(existingConnection, false)) { DynamicAssemblyBuilder assemblyBuilder = new DynamicAssemblyBuilder(); var entities = context.Entities.Include(c => c.Attributes) .Include(c => c.Listeners) .Include(c => c.Proxies) .Include("Attributes.Type") .Include(c => c.ManyToOneRelationships) .Include(c => c.OneToManyRelationships).ToArray(); var types = assemblyBuilder.BuildTypes(entities).ToArray(); assemblyBuilder.SaveAssembly(); return(types); } }