【问题标题】:Entity Framework Code First : One-To-One association using Annotations实体框架代码优先:使用注释的一对一关联
【发布时间】:2014-03-25 05:56:05
【问题描述】:

我正在使用 .NET MVC 5 和 Identity... 我正在尝试为我的 Member 类与 MemberInfo 类建立一对一的关系。 所以,我的课程看起来像这样:

IdentityUser 位于 Microsoft.AspNet.Identity.EntityFramework 命名空间中,其 ID 为字符串 Id。

public class GRNUser : IdentityUser {
    ....
    .... 
}


public class MemberUser : GRNUser {
    public virtual Member MemberInfo {get; set; }
}

public class Member { 
    public int ID {get; set; }
    public string MemberUserID {get; set; }

    public virtual MemberUser MemberUser { get; set; }
}

在我的上下文中,我有这个

modelBuilder.Entity<Member>().HasRequired(m => m.MemberUser)
                             .WithOptional(u => u.MemberInfo);

因此,MemberUser 和 Member 应该能够使用 MemberUser 的 ID 属性和 Member 的 MemberUserID 属性相互导航。

但是,在创建我的数据库时,它有一个附加列“MemberUser_Id”,而不是使用我指定的 MemberUserID。如何让它使用我指定的“MemberUserID”?

我尝试使用 ForiegnKey 数据注释的一些组合,但不断收到此错误: Member_MemberUser_Source::多重性在关系“Member_MemberUser”中的角色“Member_MemberUser_Source”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是'*'。

【问题讨论】:

  • 请告诉我你现在需要做什么

标签: asp.net-mvc entity-framework one-to-one


【解决方案1】:

我不知道我是否理解你的意思,但我会尽力提供帮助。 (我假设您使用代码优先迁移)

如果您想建立一对一的关系,为什么不尝试为您的信息创建一个独立实体,该实体将具有用户实体的外键,并且该外键将被注释为主键实体?

另一种方法是为什么不向应用程序用户实体添加您喜欢的任何属性并使用它?

无论如何我可能误解了你的目的,所以请随时进一步解释,因为你的帖子有点混乱。

【讨论】:

  • 是的,这个想法是为用户实体设置一个外键,该外键也将被注释为主键,从而使其成为真正的一对一关系。但是,由于一些设计缺陷以前,Member 表的 ID 为 int,现在有许多其他依赖项。因此,改变为时已晚
  • 我需要的基本上是一种使用引用在 Member 和 MemberUser 表之间导航的方法。引用是 MemberUser 的 ID 列和 Member 的 MemberUserID 列..
  • 所以目的是让用户能够看到其他用户的个人资料?如果没有,并且您只是希望用户的信息位于不同的表中,您可以使用 ApplicationUser 实体并添加您喜欢的任何属性。在任何情况下,您都可以尝试采取严厉措施并重新创建您的数据库(删除数据库和迁移,然后重新运行整个事情)。它解决了我在项目期间遇到的几个 EF 的问题(当然,如果您没有任何无法重建的数据)。
猜你喜欢
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多