1

我正在尝试创建一个SQL表以包含其他用户信息。我希望它由 VS2012 中的 Migrations 创建(package console => update-database)

我看到有两个表使用 UserId 列作为键:Memberships and Users tables.

我正在尝试定义以下类并通过 Migrator 将其映射到 SQL 表:

    [Key]
    [Column(Order = 0)]
    [ForeignKey("User")]
    public Guid **UserId** { get; set; }

    [Key]
    [Column(Order = 1)]
    [ForeignKey("Category")]
    public int CategoryId { get; set; }

    public virtual Category Category { get; set; }
    **public virtual User User { get; set; }**

尽管在用户 SQL 表中很明显 UserId 列是键,但我收到以下错误消息:

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'User' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'Users' is based on type 'User' that has no keys defined.

我在这里缺少什么?可能是Microsoft.VisualBasic.ApplicationServices.User / System.Web.Security.MembershipUser类不一定以这种方式映射到表,反之亦然,因此UserId未声明该属性是 Key dataannotation?

我对这个问题的其他解决方案持开放态度。

非常感谢!

4

1 回答 1

0

我目前正在将 asp.net mvc4 与 Azure db 一起使用。

当我想在 UserProfile 的其他表中使用 UserId 时。注意 AccountModels 中有类 UserProfile:

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

现在,假设您的类别是由某个用户创建的,您可以通过以下方式将类别条目链接到用户。

[Table("Category")]
public class Category
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int CategoryId { get; set; }
    public UserProfile CreatorUserId { get; set; }
}

否则,您始终可以使用 UserProfile 作为模型。

于 2012-09-05T00:42:26.833 回答