我仔细阅读了有关此论点类似问题的所有答案,但我没有找到适合我的问题的解决方案。
简而言之:我有一个使用mySQL和棱镜的C#解决方案;我的app.config具有以下实体框架部分:
<entityFramework>
<defaultConnectionFactory ype="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings configSource="Connections.config" />
文件Connections.config包含以下代码:
<add name="DataContext"
connectionString = "Server=localhost; Port=3306; Database=dbName; uid=<correct user>; pwd=<correct password>" providerName="MySql.Data.MySqlClient"/>
我确定我在配置代码中没有错别字,特别是在连接字符串中;确实,代码移民的工作就像魅力一样。但是,当我第一次访问DataContext时,我会收到臭名昭著的异常消息。代码如下:
using MyApp.DataAccess;
using System;
using System.Linq;
using System.Security.Principal;
namespace myApp.Core
{
public class UserManager : IUserManager
{
private UserAccessLevels _level;
(...)
private DataContext DataContext { get; }
public UserManager(DataContext dc) { // dc is injected by DI container
DataContext = dc ?? throw new ArgumentNullException(nameof(DataContext));
var winUserId = WindowsIdentity.GetCurrent();
var loginName = winUserId.Name.Substring(winUserId.Name.LastIndexOf('\') + 1);
// In the following line I have the error:
var usr = DataContext.AppUser.SingleOrDefault(x => x.LoginId == loginName);
我真的很感谢任何提示或真正的照明...感谢您
更新:
根据要求,请按照我的DataContext类的代码:
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public partial class DataContext : DbContext
{
(... IDbSets registration ...)
public DataContext() : base("DataContext") {
this.Configuration.ProxyCreationEnabled = false;
}
(... the rest of code ...)
再次,请记住,代码迁移正常工作;这是一种非常奇怪的行为。
在您的connections.config文件中创建一个带有 connectionStrings
的部分作为主 Web.config
中的节点的名称,这是可能解决您的问题的代码。
<connectionStrings>
<add name="DataContext"
connectionString = "Server=localhost; Port=3306; Database=dbName; uid=<correct user>; pwd=<correct password>" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>