0

私は MVC の初心者なので、気楽にやってください。

移行を追加しようとすると、2 つのエラーが発生します。それらは次のとおりです。

EntityType 'Icon' にはキーが定義されていません。この EntityType のキーを定義します。

EntityType: EntitySet 'Icons' は、キーが定義されていないタイプ 'Icon' に基づいています。

次のように、別のモデル内にアイコンを含めています。

public class Icon
        {
            public string IconName { get; set; }
            public string IconColor { get; set; }
            public int BackgroundXPos { get; set; }
            public int BackgroundYPos { get; set; }
            public string IconColorHover { get; set; }
            public int BackgroundHoverXPos { get; set; }
            public int BackgroundHoverYPos { get; set; }
        }

public class GalleryThumbnail : CSSBoxModel
    {

        [DisplayName("Thumbnail Image Outline Color")]
        public string ThumbnailImageOutlineColor { get; set; }

        [DisplayName("Thumbnail Menu Font")]
        public CSSFont ThumbnailMenuFont { get; set; }

        [DisplayName("Thumbnail Icon Color")]
        public Icon ThumbnailIconColor { get; set; }

    }

この Address クラスはどのように機能していますか?

public class Address
    {
        public String Adress1 { get; set; }
        public String Adress2 { get; set; }
        public String Adress3 { get; set; }
        public String City { get; set; }
        public String County { get; set; }
        public String State { get; set; }
        public String Zip { get; set; }
        public String Country { get; set; }

    }

 [Table("UserProfile")] //Could be PP empolyee, Subscriber or Subscriber's customer
    public class UserProfile
    {

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

        public bool? Gender { get; set; }

        public Address Address { get; set; } //billing address

        public Address ShipAddress { get; set; }


    }

DB に特定のデータを格納するつもりはないため、Icon クラスにも Address クラスにもキーを追加しませんでした。それらは単に他のクラス内で使用されるだけです。では、1 つは ID が必要で、もう 1 つは必要ないのはなぜですか?

パブリック DbSet アイコンを作成していません { get; 設定; 私のDBコンテキストでも。

また、別のクラス (またはこれらの例のようにクラス内のクラスのインスタンス) 内でクラスを使用するときに、それが何と呼ばれるか教えていただけますか?

とても有難い!

4

2 に答える 2

0

次のSystem.ComponentModel.DataAnnotations.Schema名前空間で[NotMapped]属性を使用できます。 EntityFramework.dll

using System.ComponentModel.DataAnnotations.Schema;
...

[NotMapped]
public Address Address { get; set; } //billing address

[NotMapped]
public Address ShipAddress { get; set; }

命名に関しては、知る限り、これらはパブリック プロパティとも呼ばれます。

于 2013-02-16T12:47:40.873 に答える
0

address エンティティにはキーが定義されていないため、Entity Framework はそれが複雑なプロパティであると想定し、UserProfile テーブルは Addres_Address1、Address_Address2、Address_Address3、Address_City などの名前の列でレンダリングされます...

コンテキスト クラスで EntitySetIcons DbSet を宣言していなくても、他のクラスのいずれかに ICollection または IEnumerable プロパティが定義されているため、暗黙的に追加されます。

コード規則の詳細については、http: //msdn.microsoft.com/en-us/data/jj679962.aspxをご覧ください。

したがって、@Kamyar が言ったようにコレクションを NotMapped として装飾するか、DbSet として既に宣言されているクラスから参照を単に削除します。

于 2013-02-16T14:27:44.397 に答える