外键关系EF代码优先

时间:2013-08-25 15:52:39

标签: c# entity-framework

我正在忙着创建我的第一个EF代码第一个模型,我遇到了一个有点令人困惑的问题。

我有许多模型类,每个模型类都继承自一个基本模型类,它具有我想在所有模型类中使用的三个公共属性。这些属性是Id,LastUpdated和LastUpdatedBy。

ID 是每个模型类的主键。 LastUpdated 是我的“用户”模型类的外键。 LastUpdatedBy 是一个日期时间字段,指示上次修改记录的时间。

所以我想设置的是从我的基类到我的'User'模型类的1对1外键关系,但我收到了异常:

  

多重性在角色'Profile_LastUpdatedByUser_Source'中无效   在关系'Profile_LastUpdatedByUser'中。因为依赖   角色属性不是关键属性,是上限   依赖角色的多样性必须为'*'

这是我的ModelBase类:

public class ModelBase
    {
        public int Id { get; set; }
        public DateTime LastUpdated { get; set; }

        [ForeignKey("LastUpdatedByUser")]
        [Required]
        public int LastUpdatedByUserId { get; set; }

        public virtual User LastUpdatedByUser { get; set; }
    }

这是我的模特课程之一:

public class Profile : ModelBase
    {
        [StringLength(25, MinimumLength=1)]
        [Required(ErrorMessage="First Name is Required")]
        public string FirstName { get; set; }

        [StringLength(25, MinimumLength = 1)]
        [Required(ErrorMessage = "Last Name is Required")]
        public string LastName { get; set; }

        [StringLength(25, MinimumLength = 1)]
        [Required(ErrorMessage = "Email Address is Required")]
        public string Email { get; set; }

        public string Mobile { get; set; }
        public string HomePhone { get; set; }
        public string WorkPhone { get; set; }

        public string ImageSource { get; set; }

        public Squable.Model.Enums.MembershipType.MembershipTypeEnum MembershipType { get; set; }
    }

这是我的用户类(请忽略密码属性,我稍后会解决此问题;)):

public class User : ModelBase
    {
        public string UserName { get; set; }
        public string Password { get; set; }

        public int ProfileId { get; set; }
        public virtual Profile Profile { get; set; }
    }

我不知道我所做的事情是否是最佳做法,但我可以就如何解决问题提出一些建议,或者只是指出正确的方向。

1 个答案:

答案 0 :(得分:1)

移动

public int Id { get; set; }

到User类和Profile,您还可以将名称更改为UserId和ProfileId并移动

public virtual User LastUpdatedByUser { get; set; }

到Profile类。

我在基础实体中共享Id的经验不佳如果您打算使用Repository和UnitOfWork模式,以后会遇到很多问题。使用SQL Server Management Studio检查当前的数据库结构和表。

More Info TPH