Question

I have a problem inserting a row using Entity Framework with the MySQL Connector/NET 6.4.4. When I try to save the changes after adding 1 row I get a System.NullReferenceException with the following stack-trace:

at MySql.Data.Entity.SqlGenerator.GenerateReturningSql(DbModificationCommandTree tree, DbExpression returning) 
at MySql.Data.Entity.UpdateGenerator.GenerateSQL(DbCommandTree tree) 
at MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) 
at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) 
at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree) 
at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues) 
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) 
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
at System.Data.Entity.Internal.InternalContext.SaveChanges() 
at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 
at System.Data.Entity.DbContext.SaveChanges() 
at UserData.Repository.DBRepositoryDataContext.SaveChanges() in C:\SoftwareProjects\Java\Degoo\Server\UserData\Repository\DBRepositoryDataContext.cs:line 42 
at UserData.Repository.Repository.<SaveChanges>b__1() in C:\SoftwareProjects\Java\Degoo\Server\UserData\Repository\Repository.cs:line 137 
at Microsoft.AppFabricCAT.Samples.Azure.TransientFaultHandling.RetryPolicy`1.ExecuteAction(Action action) in C:\SoftwareProjects\Java\Degoo\Server\Libraries\TransientFaultHandlingFramework\RetryPolicy.cs:line 352 

I'm using EF 4.1 with "code first". In other words: I use DbSet and DbContext.

This is what the entity I'm trying to add looks like in EF's change-tracker:

     System.Data.Entity.Infrastructure.DbEntityEntry<Utilities.IStandardEntity> 
_internalEntityEntry    System.Data.Entity.Internal.InternalEntityEntry 
CurrentValues       System.Data.Entity.Infrastructure.DbPropertyValues 
Entity      UserData.PerformanceCounterEntities.PerformanceCounterEntity 
CallingClassName    "com.degoo.tests.integration.PerformanceCounterUploaderTest"    string 
Category    {System.Data.Entity.DynamicProxies.TextEntity_27BF3732ED645CE792F48B4AA75BFD05C10C0AE9C5B35779176C02A53A587F1A} UserData.PerformanceCounterEntities.TextEntity {System.Data.Entity.DynamicProxies.TextEntity_27BF3732ED645CE792F48B4AA75BFD05C10C0AE9C5B35779176C02A53A587F1A} 
CategoryTextID  1   long 
CreationTime    {2011-11-09 09:32:12}   System.DateTime 
Description {System.Data.Entity.DynamicProxies.TextEntity_27BF3732ED645CE792F48B4AA75BFD05C10C0AE9C5B35779176C02A53A587F1A} UserData.PerformanceCounterEntities.TextEntity {System.Data.Entity.DynamicProxies.TextEntity_27BF3732ED645CE792F48B4AA75BFD05C10C0AE9C5B35779176C02A53A587F1A} 
DescriptionTextID   3   long 
ID  0   long 
ModificationTime    {2011-11-09 09:32:12}   System.DateTime 
Name    {System.Data.Entity.DynamicProxies.TextEntity_27BF3732ED645CE792F48B4AA75BFD05C10C0AE9C5B35779176C02A53A587F1A} UserData.PerformanceCounterEntities.TextEntity {System.Data.Entity.DynamicProxies.TextEntity_27BF3732ED645CE792F48B4AA75BFD05C10C0AE9C5B35779176C02A53A587F1A} 
NameTextID  2   long 
NodeID  16485   long 
NumberOfSamples 1   long 
RowVersion  0   long 
Value   1.0 double

Any ideas on what's causing this? It looks like a bug in MySQL's EF-drivers (at least they should update then to provide a better error-message).

Was it helpful?

Solution

I had a similar problem, using the same connector driver. In my case, one of the objects was using atributes instead of properties.

public class User : ProjectBasicEntity
{
   public string SomeColumn;
}

Instead of

public class User : ProjectBasicEntity
{
   public string SomeColumn { get; set;}
}

I guess someone REALLY needs to improve the error handling in those drivers...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top