1

我正忙于创建我的第一个 EF 代码优先模型,并且遇到了一个稍微令人困惑的问题。

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

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

所以我想要设置的是从我的基类到我的“用户”模型类的 1 对 1 外键关系,但我收到了异常:

多重性在关系“Profile_LastUpdatedByUser”中的角色“Profile_LastUpdatedByUser_Source”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是'*'

这是我的 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; }
    }

这是我的用户类(请忽略 Password 属性,我稍后会修复它;)):

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

我不知道我所做的是否是最佳实践,但我可以提供一些关于如何解决问题的建议,或者只是一些正确方向的指示。

4

1 回答 1

1

移动

public int Id { get; set; }

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

public virtual User LastUpdatedByUser { get; set; }

到 Profile 类。

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

更多信息

于 2013-08-25T16:16:20.067 回答