c# - EntityFramework 和 aspnetdb

标签 c# entity-framework asp.net-membership relational-database

我正在尝试将 Entity Framework 与默认成员资格“aspnetdb”数据库一起使用。

我在处理成员资格和用户表时遇到了问题,因为我希望拥有从成员资格到用户的导航属性。

我觉得我已经尝试了流畅的 api 映射的每种组合,但我一定错过了一些东西 - 或者当外键是 UserId 时它可能无法完成 - 这是两个表的主键嗯?

这是我所拥有的:

public class Membership {
        [Key]
        public Guid UserID { get; set; }
        public String Password { get; set; }

        public virtual User User { get; set; }
    }

public class User {
        [Key]
        public Guid UserId { get; set; }
        public String UserName { get; set; }

        //public virtual Membership Membership { get; set; }
        public virtual ICollection<Role> Roles { get; set; }
    }



protected override void OnModelCreating(DbModelBuilder modelBuilder) {
            modelBuilder.Entity<Membership>().ToTable("dbo.aspnet_Membership");
            modelBuilder.Entity<Role>().ToTable("dbo.aspnet_Roles");
            modelBuilder.Entity<User>().ToTable("dbo.aspnet_Users");
            modelBuilder.Entity<User>()
                            .HasMany(m => m.Roles)
                            .WithMany(m => m.Users)
                            .Map(m => {
                                m.ToTable("aspnet_UsersInRoles");
                                m.MapLeftKey("UserId");
                                m.MapRightKey("RoleId");
                            });
            //modelBuilder.Entity<Membership>()
            //    .HasRequired(m => m.User);
                //.WithOptionalPrincipal(m => m.Membership).Map(m=>m.MapKey("UserId"));
            Database.SetInitializer<EkomiteDBC>(null);
            base.OnModelCreating(modelBuilder);
        }

角色设置得很好,并且有效,但无论我如何尝试定义成员资格和用户之间的连接,我都会遇到不同的映射错误。

我知道我可能缺少一些基本的东西,有人可以帮忙吗?

编辑:问题似乎是“membership”和“users”表都有主键“UserID”。

最佳答案

试试这个:

modelBuilder.Entity<Membership>()
            .HasRequired(m => m.User)
            .WithOptional(u => u.Membership);

无论如何,你根本不应该这样做。使用标准成员 API 来访问这些表。这些表不是您的,它们属于成员资格/角色 API,通过 EF 处理它们只会删除或破坏 API 提供的开箱即用的功能 - 一般来说,它会降低安全性,因为这些表将可在 EF 和业务规则中更新来自成员(member)/角色 API 将不会被强制执行。

关于c# - EntityFramework 和 aspnetdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10425876/

相关文章:

c# - 没有 child 的情况下如何查找家长记录?

mysql - ASP.NET-Identity 限制 UserNameIndex 长度

c# - 如何在 LINQ to entities 中使用 Date 函数?

asp.net-membership - MVC4 的 ASP.NET 成员资格

c# - 需要将 Asp.Net Identity (RTM) User Id 从 nvarchar(128) 更改为 uniqueidentifier

asp.net - 当用户未登录时,ASP MVC 成员资格无法显示图像

c# - ASP.NET Core 中的循环依赖

c# - CommandParameter 上的 DataContext 与 Command 本身上的 DataContext 不同

c# - 在嵌套方法中实现嵌套事务的方法

c# - XmlAttributeOverrides 进一步定制