【问题标题】:EntityFramework and aspnetdbEntityFramework 和 aspnetdb
【发布时间】:2012-05-03 05:56:29
【问题描述】:

我正在尝试将实体框架与默认成员身份“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”。

【问题讨论】:

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


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

    • 我需要这样做,因为它们可以通过 EF 进行更新和操作。我们基本上只使用这个数据库来容纳一个依赖系统,但我们需要能够编写自定义应用程序来处理这些数据。谢谢 - 这很可能是我没有尝试过的唯一组合:)
    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    相关资源
    最近更新 更多