Trusted Authentication fails with Code First --------------------------------------------
Key: DNET-893 URL: http://tracker.firebirdsql.org/browse/DNET-893 Project: .NET Data provider Issue Type: Bug Affects Versions: 6.7.0.0 Environment: Windows 10, Firebird Super Server 2.5, Visual Studio 2019, Entity Framework 6.1.3, Code First Reporter: LC Arch Team Assignee: Jiri Cincura *Observed Behavior: Querying the database via LINQ to entities fails with an InvalidOperationException: No user name was specified. *Expected Behavior* No exception *Cause* FbProviderServices.GetDbProviderManifestToken creates a new connection through FbServerProperties if the given DbConnection is not already open. FbServerProperties, or more specifically its base classe, FbService does not support Trusted Authentication. FbService.Open specifically checks for the existence of a user name and password and throws an exception. FbService.cs: {code} protected void Open() { if (State != FbServiceState.Closed) throw new InvalidOperationException("Service already Open."); if (string.IsNullOrEmpty(_csManager.UserID)) throw new InvalidOperationException("No user name was specified."); if (string.IsNullOrEmpty(_csManager.Password)) throw new InvalidOperationException("No user password was specified."); {code} By contrast, FbConnectionInternal first checks for the existence of a user name and password, and branches into trusted authentication. FbConnectionInternal.cs: {code} public void Connect() { if (Charset.GetCharset(this.options.Charset) == null) throw new FbException("Invalid character set specified"); try { this.db = ClientFactory.CreateDatabase(this.options); this.db.Charset = Charset.GetCharset(this.options.Charset); this.db.Dialect = (short) this.options.Dialect; this.db.PacketSize = this.options.PacketSize; DatabaseParameterBuffer dpb = this.BuildDpb(this.db, this.options); if (this.options.FallIntoTrustedAuth) this.db.AttachWithTrustedAuth(dpb, this.options.DataSource, this.options.Port, this.options.Database); else this.db.Attach(dpb, this.options.DataSource, this.options.Port, this.options.Database); } {code} *Workaround* Opening the connection manually before passing it into DbContext is a workaround. *Stack Trace* > > FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.Open() > Line 108 C# FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.QueryService(byte[] items) Line 346 C# FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.ProcessQuery(byte[] items, System.Action<bool, object> queryResponseAction) Line 235 C# FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.Query(byte[] items) Line 199 C# FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbServerProperties.GetInfo(int item) Line 87 C# FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbServerProperties.GetString(int item) Line 77 C# EntityFramework.Firebird.dll!FirebirdSql.Data.EntityFramework6.FbProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection connection) Line 154 C# EntityFramework.dll!System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(System.Data.Common.DbConnection connection) Unknown EntityFramework.dll!System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(System.Data.Entity.Core.Common.DbProviderServices providerServices, System.Data.Common.DbConnection connection) Unknown mscorlib.dll!System.Collections.Concurrent.ConcurrentDictionary<System.Tuple<System.Type, string, string>, string>.GetOrAdd(System.Tuple<System.Type, string, string> key, System.Func<System.Tuple<System.Type, string, string>, string> valueFactory) Unknown EntityFramework.dll!System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(System.Data.Common.DbConnection connection, out System.Data.Entity.Core.Common.DbProviderManifest providerManifest) Unknown EntityFramework.dll!System.Data.Entity.DbModelBuilder.Build(System.Data.Common.DbConnection providerConnection) Unknown EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.CreateModel(System.Data.Entity.Internal.LazyInternalContext internalContext) Unknown EntityFramework.dll!System.Data.Entity.Internal.RetryLazy<System.Data.Entity.Internal.LazyInternalContext, System.Data.Entity.Infrastructure.DbCompiledModel>.GetValue(System.Data.Entity.Internal.LazyInternalContext input) Unknown EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.InitializeContext() Unknown EntityFramework.dll!System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(System.Type entityType) Unknown EntityFramework.dll!System.Data.Entity.Internal.Linq.InternalSet<Settings.DataAccess.Entities.SettingEntity>.Initialize() Unknown EntityFramework.dll!System.Data.Entity.Internal.Linq.InternalSet<Settings.DataAccess.Entities.SettingEntity>.InternalContext.get() Unknown EntityFramework.dll!System.Data.Entity.Infrastructure.DbQuery<Settings.DataAccess.Entities.SettingEntity>.System.Linq.IQueryable.Provider.get() Unknown System.Core.dll!System.Linq.Queryable.Where<Settings.DataAccess.Entities.SettingEntity>(System.Linq.IQueryable<Settings.DataAccess.Entities.SettingEntity> source, System.Linq.Expressions.Expression<System.Func<Settings.DataAccess.Entities.SettingEntity, bool>> predicate) Unknown -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://tracker.firebirdsql.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira _______________________________________________ Firebird-net-provider mailing list Firebird-net-provider@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/firebird-net-provider