1

SQL追加のユーザー情報を含めるテーブルを作成しようとしています。VS2012 の Migrations で作成したい(package console => update-database)

UserId 列をキーとして使用する 2 つのテーブルがあることがわかります。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; }**

Users 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

現在、Azure db で asp.net mvc4 を使用しています。

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 に答える