C# EF Fluent api poco生成和映射(使用现有数据库)

C# EF Fluent api poco生成和映射(使用现有数据库),c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有如下所示的两个表,我对如何创建poco类以及如何映射它们感到困惑 我已经创建了如下的POCO类 public partial class ExpenseIncome { public int ID { get; set; } public int? ExpIncTypeID { get; set; } public int AccountID { get; set; } public decimal? Amount { get; set; } pu

我有如下所示的两个表,我对如何创建poco类以及如何映射它们感到困惑

我已经创建了如下的POCO类

public partial class ExpenseIncome
{
    public int ID { get; set; }
    public int? ExpIncTypeID { get; set; }
    public int AccountID { get; set; }
    public decimal? Amount { get; set; }
    public int? UserID { get; set; }
    public int? GroupID { get; set; }
    public DateTime? AddedDate { get; set; }
    public string Explanation { get; set; }
    public int? ParentItemID { get; set; }
    public decimal? Balance { get; set; }
    public bool? IsActive { get; set; }
    public DateTime? ActivationDate { get; set; }
    // this is  navigation property
    public virtual ExpenseIncomeType ExpenseIncomeType { get; set; }
}
其他POCO是:

public partial class ExpenseIncomeType
{
    public int ID { get; set; }
    public string TName { get; set; }
    public int? IsExpOrInc { get; set; }
    public int? ParentExpTypeID { get; set; }
    public decimal? ExpIncTypeDefaultAmount { get; set; }
    public string UserGroupUniqueValue { get; set; }
    public int? UserGroupID { get; set; }
    // this is  navigation property
    public virtual ExpenseIncome ExpenseIncome { get; set; }
}

因此,我对如何在
DbContext
ModelCreating(DbModelBuilder-modelBuilder-builder)
方法中映射这些类感到困惑。

如果您选择代码优先的方法,至少有两种方法可以做到这一点

  • 在DbContext中,您必须重写ModelCreating,如您所说,并为每个实体编写如下内容:

  • DbContext中的Poco模型应该与数据库结构完全匹配,在这种情况下,不需要生成任何数据库迁移。

    这不能是1:1关联。当然,“许多”
    ExpenseIncome
    s可以共享相同的
    ExpenseIncomeType
    。因此,映射应该是:

    modelBuilder.Entity<ExpenseIncome>()
                .HasRequired(e => e.ExpenseIncomeType).WithMany();
    
    modelBuilder.Entity()
    .HasRequired(e=>e.ExpenseIncomeType).WithMany();
    
    并且
    ExpenseIncomeType
    中的属性
    public virtual ExpenseIncome ExpenseIncome{get;set;}
    应该消失


    从语义上说,
    ExpenseIncome
    “有一个”
    ExpenseIncomeType
    ,这是正确的。相反的说法没有多大意义,尽管从技术上讲,
    ExpenseIncomeType
    可能会有一个
    ICollection

    Hi,@GertArnold i'v按照您的解释完成,并且工作正常。我还在代码的末尾添加了ForeingKey。现在映射如下图所示
    .HasRequired(e=>e.ExpenseIncomeType).WithMany().HasForeignKey(x=>x.ExpIncTypeID)谢谢。
    public class ExpenseIncomeMap: EntityTypeConfiguration<ExpenseIncome>
        {
         public RoleConfiguration()
          {
            HasKey(e => e.ID);
            // etc.
          }
        }
    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ExpenseIncomeMap());
            modelBuilder.Configurations.Add(new ExpenseIncomeTypeMap());
        }
    
    modelBuilder.Entity<ExpenseIncome>()
                .HasRequired(e => e.ExpenseIncomeType).WithMany();