gpt4 book ai didi

c# - Entity Framework 代码优先问题(SimpleMembership UserProfile 表)

转载 作者:IT王子 更新时间:2023-10-29 04:14:08 27 4
gpt4 key购买 nike

如果您使用过 ASP.NET MVC 4,您会注意到 Internet 应用程序的默认设置是使用 SimpleMembership 提供程序,这一切都很好并且工作正常。

问题与默认数据库生成有关,他们有一个 POCO for UserProfile 定义如下:

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

.. 然后生成如下:

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

这很好用,数据库生成得很好并且没有问题。但是,如果我要像这样更改 POCO 并删除数据库:

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

public string FirstName { get; set; }
public string Surname { get; set; }

public string Country { get; set; }

public string CompanyName { get; set; }
}

仅生成前 2 列,UserIdEmailAddress。它在代码方面工作得很好(谈论登录/注册),但显然我的其他用户数据都没有被存储。

我是不是漏掉了什么?当然,它应该根据整个 UserProfile 对象生成数据库。

最佳答案

1 - 您需要启用迁移,最好使用 EntityFramework 5。在 NuGet 包管理器中使用 Enable-Migrations

2 - 移动你的

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "EmailAddress", autoCreateTables: true); 

到您的 YourMvcApp/Migrations/Configuration.cs 类中的 Seed 方法

    protected override void Seed(UsersContext context)
{
WebSecurity.InitializeDatabaseConnection(
"DefaultConnection",
"UserProfile",
"UserId",
"UserName", autoCreateTables: true);

if (!Roles.RoleExists("Administrator"))
Roles.CreateRole("Administrator");

if (!WebSecurity.UserExists("lelong37"))
WebSecurity.CreateUserAndAccount(
"lelong37",
"password",
new {Mobile = "+19725000000", IsSmsVerified = false});

if (!Roles.GetRolesForUser("lelong37").Contains("Administrator"))
Roles.AddUsersToRoles(new[] {"lelong37"}, new[] {"Administrator"});
}

现在 EF5 将负责创建您的 UserProfile 表,之后您将调用 WebSecurity.InitializeDatabaseConnection 以仅向已创建的 UserProfile 表注册 SimpleMembershipProvider,同时告知 SimpleMembershipProvider 哪一列是 UserId 和 UserName。我还展示了一个示例,说明如何在 Seed 方法中添加用户、角色并将两者与自定义 UserProfile 属性/字段相关联,例如用户的手机(号码)。

3 - 现在,当您从程序包管理器控制台运行更新数据库时,EF5 将为您的表提供所有自定义属性

有关其他引用资料,请参阅这篇文章和源代码:<强> http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/

关于c# - Entity Framework 代码优先问题(SimpleMembership UserProfile 表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12502004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com