首页 > 解决方案 > 一对一关系实体框架

问题描述

我有两张表,一张是客户列表,另一张是活跃与否。我想将它们链接到实体框架,但是,我很挣扎。这两个表已经设置好,必须主键或外键。

namespace DataWarehouse.Models
{
    public class DatabaseList
    {
        [Key]
        public string STARDB { get; set; }
        public int DBClientID { get; set; }
        public string ClientName { get; set; }
        public DatabaseStatus DatabaseStatus { get; set; }

        public ICollection<PayComponents> PayComponents { get; set; }
         = new List<PayComponents>();
    }

    public class DatabaseStatus
    {
        [Key]
        public string STARDB { get; set; }
        public string STATUS { get; set; }

        public DatabaseList DatabaseList { get; set; }
    }

    public class DatabaseContext : DbContext
    {
        public DatabaseContext(DbContextOptions<DatabaseContext> options)
            : base(options)
        {
        }

        public DbSet<DatabaseList> DatabaseList { get; set; }
        public DbSet<DatabaseStatus> Status { get; set; }
        public DbSet<PayComponents> PayComponents { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<DatabaseList>()
                .HasOne(p => p.DatabaseStatus)
                .WithOne(i => i.DatabaseList)
                .HasForeignKey<DatabaseStatus>(k => k.STARDB);
        }
    }
}

我希望 Entity Framework 能看到这些列STARDB并注意到它在两个表中是相同的并以这种方式匹配它们。我想要的只是将Status列添加DatabaseStatusDatabaselist表中。

谢谢。

标签: c#asp.netasp.net-mvcentity-frameworkasp.net-core-2.0

解决方案


设法弄清楚了。我的数据库设置正确。但是,我忘记了 Repository.cs 类中的 include 语句。

    public IEnumerable<DatabaseList> GetAllClients()
    {
        _logger.LogInformation("Get all clients was called");

        var clients = _ctx.DatabaseList
                       .Include(d => d.DatabaseStatus)
                       .OrderBy(p => p.ClientName)
                       .ToList();

        return clients;
    }

还是 C# 的新手,所以有点学习曲线!


推荐阅读