Note that there are some explanatory texts on larger screens.

plurals
  1. POEntity framework not saving changes in production enviroment
    primarykey
    data
    text
    <p>I am writing a desktop application that works with EF and MySql. There is a mapping of each type created by the EF to a local type. When testing the wrapper methods using the unit testing framework supplied by Visual Studio, all the test run -and I see the information going in and out of the database. However, when I run the same code from a temp console program I added for integration tests, the EF throws the following exception:</p> <pre><code>System.NullReferenceException: Object reference not set to an instance of an object. at MySql.Data.MySqlClient.MySqlClientFactory.get_MySqlDbProviderServicesInstance() at MySql.Data.MySqlClient.MySqlClientFactory.System.IServiceProvider.GetService(Type serviceType) at System.Data.Common.DbProviderServices.GetProviderServices(DbProviderFactory factory) at System.Data.Metadata.Edm.StoreItemCollection.Loader.InitializeProviderManifest(Action`3 addError) at System.Data.Metadata.Edm.StoreItemCollection.Loader.OnProviderManifestTokenNotification(String token, Action`3 addError) at System.Data.EntityModel.SchemaObjectModel.Schema.HandleProviderManifestTokenAttribute(XmlReader reader) at System.Data.EntityModel.SchemaObjectModel.Schema.HandleAttribute(XmlReader reader) at System.Data.EntityModel.SchemaObjectModel.SchemaElement.ParseAttribute(XmlReader reader) at System.Data.EntityModel.SchemaObjectModel.SchemaElement.Parse(XmlReader reader) at System.Data.EntityModel.SchemaObjectModel.Schema.HandleTopLevelSchemaElement(XmlReader reader) at System.Data.EntityModel.SchemaObjectModel.Schema.InternalParse(XmlReader sourceReader, String sourceLocation) at System.Data.EntityModel.SchemaObjectModel.Schema.Parse(XmlReader sourceReader, String sourceLocation) at System.Data.EntityModel.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModel, AttributeValueNotification providerNotification, AttributeValueNotification providerManifestTokenNotification, ProviderManifestNeed ed providerManifestNeeded, IList`1&amp; schemaCollection) at System.Data.Metadata.Edm.StoreItemCollection.Loader.LoadItems(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths) at System.Data.Metadata.Edm.StoreItemCollection.Init(IEnumerable`1 xmlReaders, IEnumerable`1 filePaths, Boolean throwOnError, DbProviderManifest&amp; providerManifest, DbProviderFactory&amp; providerFactory, String&amp; providerManifestToken, Memoizer`2&amp; cachedCTypeFunction) at System.Data.Metadata.Edm.StoreItemCollection..ctor(IEnumerable`1 xmlReaders, IEnumerable`1 filePaths) at System.Data.Metadata.Edm.MetadataCache.StoreMetadataEntry.LoadStoreCollection(EdmItemCollection edmItemCollection, MetadataArtifactLoader loader) at System.Data.Metadata.Edm.MetadataCache.StoreItemCollectionLoader.LoadItemCollection(StoreMetadataEntry entry) at System.Data.Metadata.Edm.MetadataCache.LoadItemCollection[T](IItemCollectionLoader`1 itemCollectionLoader, T entry) at System.Data.Metadata.Edm.MetadataCache.GetOrCreateStoreAndMappingItemCollections(String cacheKey, MetadataArtifactLoader loader, EdmItemCollection edmItemCollection, Object&amp; entryToken) at System.Data.EntityClient.EntityConnection.LoadStoreItemCollections(MetadataWorkspace workspace, DbConnection storeConnection, DbProviderFactory factory, DbConnectionOptions connectionOptions, EdmItemCollection edmItemCollection, MetadataArtifactLoader artifactLoader) at System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections) at System.Data.EntityClient.EntityConnection.InitializeMetadata(DbConnection newConnection, DbConnection originalConnection, Boolean closeOriginalConnectionOnFailure) at System.Data.EntityClient.EntityConnection.Open() at System.Data.Objects.ObjectContext.EnsureConnection() at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) at System.Data.Objects.ObjectContext.SaveChanges() at DataAccess.PhoneTypeAccess.AddNewPhoneType(PhoneType newPhoneType) in C:\Users\Mordechai\Desktop\Progaming\GitHub\VirtualGabbai\VirtGabbai\DataAccess\PhoneTypeAccess.cs:line 66 at TempUI.Program.Main(String[] args) in C:\Users\Mordechai\Desktop\Progaming\GitHub\VirtualGabbai\VirtGabbai\TempUI\Program.cs:line 17 </code></pre> <p>Here is the code i run in program.cs</p> <pre><code>static void Main(string[] args) { try { PhoneTypeAccess.AddNewPhoneType(new PhoneType(1, "phone")); var blah = PhoneTypeAccess.GetPhoneTypeById(1); Console.WriteLine(blah.ToString()); //Cache.CacheData.t_phone_types.AddObject(t_phone_types.Createt_phone_types(1, "some Type")); //var thingOne = t_people.Createt_people(1); //Cache.CacheData.t_people.AddObject(thingOne); //Cache.CacheData.SaveChanges(); //PhoneNumberAccess.AddNewPhoneNumber(new PhoneNumber(1, "some number", new PhoneType(1, "some type"))); //var test = PhoneNumberAccess.GetPhoneNumberById(1); //Console.WriteLine(test.ToString } catch (Exception e) { Console.WriteLine(e.ToString()); } } </code></pre> <p>The test contains the following code</p> <pre><code>[TestMethod()] public void AddNewPhoneTypeTest() { PhoneType newPhoneType = new PhoneType(21, "phonetype:21"); PhoneTypeAccess.AddNewPhoneType(newPhoneType); PhoneType actual = PhoneTypeAccess.GetPhoneTypeById(21); Assert.IsTrue(newPhoneType.Equals(actual)); } </code></pre> <p>And the code being called is as follows</p> <pre><code> public static void AddNewPhoneType(PhoneType newPhoneType) { t_phone_types phoneTypeToAdd = PhoneTypeAccess.ConvertSingleLocalPhoneTypeToDbType(newPhoneType); Cache.CacheData.t_phone_types.AddObject(phoneTypeToAdd); Cache.CacheData.SaveChanges(); } </code></pre> <p>When i went in with debug at the line <code>Cache.CacheData.SaveChanges()</code>, I get to the following code </p> <pre><code>/// &lt;summary&gt; /// Allows access to the cached data - but only a single (and constant) instance of it /// -[the code can create another one but it will be a completly different set of data]- /// &lt;/summary&gt; public static class Cache { // Data members private static zera_leviEntities m_dsDataSet = new zera_leviEntities(); /// &lt;summary&gt; /// Allows outside access to the main data set /// - without letting the user access it any other way /// &lt;/summary&gt; public static zera_leviEntities CacheData { get { return m_dsDataSet; } } } </code></pre> <p>and the only thing I could see was the fact that in the entity set there really was no object. but there was no indication as to why I've looked all over and didnt find anything that helped. I am stuck until I get this running so I hope someone can help me Thank you</p> <p>Edit: Added in the conversion method</p> <pre><code>private static t_phone_types ConvertSingleLocalPhoneTypeToDbType(PhoneType localTypePhoneType) { return t_phone_types.Createt_phone_types(localTypePhoneType._Id, localTypePhoneType.PhoneTypeName); } </code></pre> <p>The t_phone_types.Createt_phone_types() method is part of the EF</p> <p>Edit: I've managed to break the tests also now by changing the references in the whole solution to an updated version of the MySql Adapter Now the tests also throw the same exception. In addition when building I get the following error:</p> <pre><code>Error 4: Could not load file or assembly 'MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) C:\Users\Mordechai\Desktop\Progaming\GitHub\VirtualGabbai\VirtGabbai\Data\EntityCache.edmx </code></pre> <p>BUT, it will still run (just that it throws the exception)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload