November Happy Hour will be moved to Thursday December 5th.
AI OnAI Off
November Happy Hour will be moved to Thursday December 5th.
Hi,
Optimizely won't automatically detect this, 'Code First Migrations' will.
If you have it all setup and configured correctly when the solution runs the table/s will be created using entity framework.
https://docs.developers.optimizely.com/digital-experience-platform/docs/custom-database-tables
Paul
For CMS 11, I usually make sure I have this configuration as true in the web.config file:
<episerver.framework createDatabaseSchema="true" updateDatabaseSchema="true">
Then, I create a Db Context class and specify the connectionstring = "EpiserverDB"
public class NewTableNameContext : DbContext
{
public NewTableNameContext()
: base("name=EPiServerDB")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
public virtual DbSet<NewTableRecord> NewTableRecords { get; set; }
}
Then I need to create the Entity for the table:
[Table("NewTableRecord")]
public class NewTableRecord
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Title{ get; set; }
}
Finally, I create a repository where all the CRUD operations happen:
public class NewTableNameRepository : INewTableNameRepository //You can create an interface
{
public IEnumerable<NewTableRecord> GetAll()
{
using (var context = new NewTableNameContext())
{
return context.Set<NewTableRecord>().OrderBy(x => x.Title).ToList();
}
}
public NewTableRecord GetById(int id)
{
using (var context = new NewTableNameContext())
{
return context.Set<NewTableRecord>().Find(id);
}
}
public void Insert(NewTableRecord entity)
{
using (var context = new NewTableNameContext())
{
context.Set<NewTableRecord>().Add(entity);
context.SaveChanges();
}
}
public void InsertAll(IEnumerable<NewTableRecord> entities)
{
using (var context = new NewTableNameContext())
{
context.Set<NewTableRecord>().AddRange(entities);
context.SaveChanges();
}
}
public void Update(NewTableRecordentity)
{
using (var context = new NewTableNameContext())
{
context.Set<NewTableRecord>().Attach(entity);
context.Entry(entity).State = EntityState.Modified;
context.SaveChanges();
}
}
public void Delete(NewTableRecordentity)
{
using (var context = new NewTableNameContext())
{
if (context.Entry(entity).State == EntityState.Detached)
context.Set<NewTableRecord>().Attach(entity);
context.Set<NewTableRecord>().Remove(entity);
context.SaveChanges();
}
}
}
I'm using EntityFramework to work with the Database and you can use DI to inject the services.
Hope this helps :)
Hi, If I add customs tables to the database using code first approach, will Optimizely automatically detect this and do a migration for me or do I need to do that on my own?