0

我是 MVC 新手,所以请放轻松。

尝试添加迁移时出现两个错误。它们如下:

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; }

    }

这个地址类下面的任何不同的工作如何:

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; }


    }

我没有在 Icon 或 Address 类中添加键,因为我无意在我的数据库中存储特定数据。它们只能在其他类中使用。那么为什么一个需要身份证而另一个不需要呢?

我还没有创建公共 DbSet Icons { get; 放; 在我的数据库上下文中。

您还可以告诉我当您在另一个(或这些示例中的类中的类的实例)中使用一个类时它被称为什么?

非常感激!

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; }

关于命名,AFAIK 这些也称为公共属性。

于 2013-02-16T12:47:40.873 回答
0

由于地址实体没有定义任何键,因此实体框架假定它是一个复杂属性,并且您的 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 回答