C# EF Fluent api poco生成和映射(使用现有数据库)
我有如下所示的两个表,我对如何创建poco类以及如何映射它们感到困惑 我已经创建了如下的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
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中的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();