c# - 我怎样才能访问 mvc4 中的成员表?

标签 c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我正在尝试在 MVC4 中使用注册和登录表单。我已经使用 DB 中的 Entity Framework 来创建模型,现在我想生成成员表,但我已经尝试了很多东西,但我仍然无法访问它们。

我有 2 个连接字符串:

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-Projekti-20160917211151;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-Projekti-20160917211151.mdf" providerName="System.Data.SqlClient" />

 <add name="UniversitetiEntities" connectionString="metadata=res://*/Models.Universiteti.csdl|res://*/Models.Universiteti.ssdl|res://*/Models.Universiteti.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ARBERS-PC\BERSANTA;initial catalog=Universiteti;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> </connectionStrings> 

在帐户模型中,我更改了 UniversitetiEntities 中的基数:

public class UsersContext : DbContext
{
    public UsersContext()
        : base("UniversitetiEntities")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
}

我还在 InitializeSimpleMembershipAttribute 文件中做了这个更改:

 private class SimpleMembershipInitializer
    {
        public SimpleMembershipInitializer()
        {
            Database.SetInitializer<UsersContext>(null);

            try
            {
                using (var context = new UsersContext())

                {
                    if (!context.Database.Exists())
                    {
                        // Create the SimpleMembership database without Entity Framework migration schema
                        ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                    }
                }

                WebSecurity.InitializeDatabaseConnection("UniversitetiEntities", "UserProfile", "UserId", "UserName", autoCreateTables: true);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
            }
        }
    }
}

但它总是抛出这个异常:无法初始化 ASP.NET 简单成员数据库。

最佳答案

据我所知,SimpleMembershipProvider 用户配置文件管理仅适用于 SQL Server 数据库连接字符串,不适用于 EF 连接字符串。

首先,尝试设置您的数据库连接字符串而不是 EF 生成的连接字符串,如 here 所述:

private class SimpleMembershipInitializer
{
    public SimpleMembershipInitializer()
    {
        Database.SetInitializer<UsersContext>(null);

        try
        {
            using (var context = new UsersContext())
            {
                if (!context.Database.Exists())
                {
                    // Create the SimpleMembership database without Entity Framework migration schema
                    ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                }
            }

            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
        }
    }
}

// also set your DB connection string on current DB context
public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

如果第一个解决方案不起作用,请尝试从 SQL Server 连接字符串中删除 AttachDbFileName 属性:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-Projekti-20160917211151;Integrated Security=SSPI" providerName="System.Data.SqlClient" />

注意:如果您的数据库连接有特定的用户 ID 和密码来获取访问权限,请将它们包含在 DefaultConnection 中。

根据您的 EF 模型生成(代码优先、数据库优先或模型优先方法),您可以根据 UserProfile 表的存在将 autoCreateTables: 设置为 true 或 false .

更多信息:SimpleMembership Provider Reference

关于c# - 我怎样才能访问 mvc4 中的成员表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39561500/

相关文章:

c# - 写入 C# 变量时出现不安全 JavaScript 错误

c# - 将频率转换为-1..1浮点

c# - WCF 公共(public) Web 服务的安全性

asp.net - 文本框的默认值

asp.net-mvc - 删除操作 - asp.net mvc - 一般反馈 - 样式问题

c# - AWS EC2 MVC 应用程序和 Lambda Serverless Web API 应用程序之间的文件传输导致数据损坏

c# - 为什么按钮单击事件 "bubble up visual tree"不按 MSDN 文章所述发送到 StackPanel?

c# - 具有托管代码问题的静态库

c# - 高级自定义多语言 URL 处理/角色和成员资格 LoginUrl

asp.net-mvc - 扩展Razor View Engine以处理渲染