E.F 6.0代码首次一对一导航属性异常

时间:2014-10-20 08:30:53

标签: entity-framework exception data-annotations code-first

我发布了一个非常奇怪的场景,首先使用Code与现有数据库和asp.net身份实体框架。我有一个简单的userprofile模型

    [Table("CSUserProfile")]
    public partial class UserProfile
    {
        [Key]
        public string Id { get; set; }

        [Required]
        [Display(Name = "FirstName")]
        public string FirstName { get; set; }

        [Required]
        [Display(Name = "LastName")]
        public string LastName { get; set; }

        [Required]
        [Display(Name = "Phone")]
        public string Phone { get; set; }

        [Required]
        public string Email { get; set; }

        [Required]
        [Display(Name = "Location")]
        public string Location { get; set; }

        [Required]
        [Display(Name = "HomeTown")]
        public string Hometown { get; set; }

        public byte[] BlobData { get; set; }

        [ForeignKey("fPersonLinkGID")]
        public virtual List<ProfilePic> ProfilePic { get; set; }
    }     

和图像资料图片

 [Table("CSProfilePic")]
public partial class ProfilePic
{
    [Key]
    public Guid? GID { get; set; }
    public string fPersonLinkGID { get; set; }
    public byte[] BlobData { get; set; }
}

外键是fPersonLinkGID。一切正常但我的问题是,如果我想在userprofile和像这样的图像之间建立一对一的关系

public virtual ProfilePic ProfilePic {get;组; }

(这是正确的场景)我得到了这个奇怪的例外:

  

属性&#39; ProfilePic&#39;上的ForeignKeyAttribute on type&#39; eUni.Model.Application.UserProfile&#39;无效。外键名称&#39; fPersonLinkGID&#39;未在依赖类型&e; eUni.Model.Application.UserProfile&#39;上找到。 Name值应该是以逗号分隔的外键属性名称列表。

我无法理解为什么我会得到那个例外

1 个答案:

答案 0 :(得分:1)

您可以阅读this answer。它介绍了如何按HasRequiredWithOptional配置一对一关系。

至于我,我将通过以下方式建立一对一的关系。

public class Store {
    [Key]
    public long Id { get; set; }

    public virtual Item TheItem { get; set; }

    // .... 
}

public class Item {
    // It is FK, and also PK.
    [Key, ForeignKey("TheStore")]
    public long Id { get; set; }

    // The same string in the ForeignKey attribute. Ex: ForeignKey("TheStore")
    public virtual Store TheStore { get; set; }

    // ....
}