实体框架&代码优先:无法在ApplicationUser和UserProfile之间一对一地获取数据

时间:2016-10-03 08:45:19

标签: asp.net-mvc entity-framework asp.net-identity

我有自定义ApplicationUser并创建UserProfile,但无法从UserProfile获取数据ApplicationUser

攻击图片:

enter image description here

请参阅http://www.mediafire.com/file/a9bpajjc44fuewp/DemoMVC6.rar

更新我的代码:

namespace DemoMVC6.Models
{
    // Add profile data for application users by adding properties to the ApplicationUser class
    public class ApplicationUser : IdentityUser
    {
        public virtual UserProfile UserProfile { get; set; }
    }

    [Table("UserProfile")]
    public class UserProfile : EntityBase
    {
        [Required, MinLength(3), MaxLength(20)]
        public string FirstName { get; set; }

        [Required, MinLength(3), MaxLength(20)]
        public string LastName { get; set; }

        public bool? Gender { get; set; }
        public DateTime? Birthday { get; set; }
        public string Address { get; set; }

        public virtual ApplicationUser ApplicationUser { get; set; }
    }

    public abstract class EntityBase
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public virtual int Id { get; set; }

        [EnumDataType(typeof(RecordStatus))]
        public virtual RecordStatus ActiveStatus { get; set; }

        [DataType(DataType.DateTime)]
        public virtual DateTime CreatedOn { get; set; }
        public virtual int CreatedBy { get; set; }

        [DataType(DataType.DateTime)]
        public virtual DateTime ModifiedOn { get; set; }
        public virtual int ModifiedBy { get; set; }
    }

    public enum RecordStatus { Inactive = 0, Active = 1 }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }

        public override int SaveChanges()
        {
            var currentTime = DateTime.Now;
            var trackerEntries = this.ChangeTracker.Entries().Where(e => e.State == EntityState.Added || e.State == EntityState.Modified);

            //Find all Entities that are Added/Modified that inherit from my EntityBase
            foreach (var entry in trackerEntries)
            {
                if (entry.State == EntityState.Added)
                {
                    if (entry.Metadata.FindProperty("ActiveStatus") != null)
                        entry.Property("ActiveStatus").CurrentValue = RecordStatus.Active;

                    if (entry.Metadata.FindProperty("CreatedOn") != null)
                        entry.Property("CreatedOn").CurrentValue = currentTime;

                    if (entry.Metadata.FindProperty("ModifiedOn") != null)
                        entry.Property("ModifiedOn").CurrentValue = currentTime;
                }
                else
                {
                    if (entry.Metadata.FindProperty("ModifiedOn") != null)
                        entry.Property("ModifiedOn").CurrentValue = currentTime;
                }
            }

            return base.SaveChanges();
        }

        public DbSet<UserProfile> UserProfiles { get; set; }
    }
}

0 个答案:

没有答案