外键关系EF代码优先

本文关键字:代码 EF 关系 | 更新日期: 2023-09-27 18:28:53

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

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

Id是每个模型类的主键。LastUpdated是我的"User"模型类的外键。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; }
    }

这是我的用户类(请忽略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; }
    }

我不知道我所做的是否是最好的练习,但我可以给你一些建议,告诉你如何解决问题,或者只是一些正确的方向。

外键关系EF代码优先

移动

public int Id { get; set; }

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

public virtual User LastUpdatedByUser { get; set; }

到Profile类。

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

更多信息TPH