Asked by:
ValidationContext is always null

Question
-
User299025995 posted
Hi,
I'm using VS 2012 and I created an Asp.Net Dynamic Data Entities website with Entity Framework 5 DbContext.
I would like to perform validation reading some data from the DbContext so I created a custom validation attribute and I overriden IsValid method.
The problem is that validationContext parameter is always null.
I also tried to override DbContext SaveChanges to perform custom validation but it seems that SaveChanges isn't invoked.How can I perform custom validation reading data from DbContext and having entity (validation context) that is being validated?
Saturday, October 19, 2013 6:48 AM
All replies
-
User-330204900 posted
Hi OasisLiveFor, I don;t do things liek that I get the saving changes event and then do my validation there are I always had issues doing things the other way.
Also I'm not sure that the Validation Context is for that can you post some sample code please?
Saturday, October 19, 2013 7:12 AM -
User299025995 posted
public partial class TestDynamicDataEntitiesContext : DbContext { public TestDynamicDataEntitiesContext(string nameOrConnectionString) : base(nameOrConnectionString) { ObjectContext context = ((IObjectContextAdapter)this).ObjectContext; context.SavingChanges += Context_SavingChanges; } private void Context_SavingChanges(object sender, EventArgs e) { ObjectContext context = (ObjectContext)sender; TestDynamicDataEntities entities = new TestDynamicDataEntities(); foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified)) { if (entry.Entity != null) { if (entry.Entity.GetType() == typeof(#MyEntityType#)) { #MyEntityType# myEntity = entry.Entity as #MyEntityType#; // Perform custom validation on myEntity reading from TestDynamicDataEntities context. } } } } }
Hi,I created a base class that inherits from DbContext and I changed t4 template to inherits form this custom base class. I attached to SavingChanges and perrmed custom validation.
Everything works fine.
Is this approach correct?Saturday, October 19, 2013 7:38 AM -
User697462465 posted
Hi OasisLive,
I suggest you to pass the ValidationContext you need to override DbContext.ValidateEntity(). The method takes two parameters - entity entry and items. You would pass your validation context in the items dictionary. Take a look at the "Customizing Validation" section of a blog :
http://blogs.msdn.com/b/adonet/archive/2010/12/15/ef-feature-ctp5-validation.aspx
Hope this helps.
Best Regards,
Terry GuoMonday, October 21, 2013 3:44 AM -
User299025995 posted
Hi,
ValidateEntity is not invoked.
As you can see from my previous post, I use DBContext but I register an ObjectContext in global.asax.cs:
DefaultModel.RegisterContext(() => { return ((IObjectContextAdapter)new TestDynamicDataEntities()).ObjectContext; },
Monday, October 21, 2013 4:40 AM