【发布时间】:2020-11-23 21:37:21
【问题描述】:
我正在将我们的 webapis 重写为 .NET Core 并使用 EntityFrameworkCore 5.0。在我们之前的迭代中,我们使用了 EntityFramework 6。我们正在移动这个应用程序,以便我们可以在 azure 上托管它。
我是 EFCore 的新手,注意到一些我似乎无法解决的差异。
我们有一个实体,它将使用来自两个表的映射,一个是视图,另一个是对象将存在的实际表。最后一部分包含用于插入、更新和删除条目中的存储过程dbo.PhoneFaxEmail 表。
之前的 EF6 代码如下。
Map(m =>
{
m.ToTable("HomeownerContactDetails_vw", "monarch");
m.Properties(h => new { h.HomeownerId, h.Id, h.StartDate, h.EndDate });
m.Requires("RelationTypeLUKey").HasValue(587); // Contact-PhoneFaxEmail (p-c)
m.Property(h => h.HomeownerId).HasColumnName("ParentRelationKey");
m.Property(h => h.Id).HasColumnName("ChildRelationKey");
});
#endregion
#region PhoneFaxEmail Mapping
Map(m =>
{
m.ToTable("dbo.PhoneFaxEMail");
m.Properties(h => new { h.Type, h.Value, h.ValidDate, h.Status, h.Version });
m.Property(h => h.Id)
.HasColumnName("RelationKey");
m.Property(h => h.Type).HasColumnName("PhoneFaxEMailTypeLUKey");
m.Property(h => h.Value).HasColumnName("Value");
m.Property(h => h.ValidDate).HasColumnName("StatusDate");
m.Property(h => h.Status).HasColumnName("StatusLUKey");
m.Property(a => a.CreatedBy).HasColumnName("CreatedBy");
m.Property(a => a.CreatedDate).HasColumnName("CreatedDate");
m.Property(a => a.ModifiedBy).HasColumnName("ModifiedBy");
m.Property(a => a.ModifiedDate).HasColumnName("ModifiedDate");
});
#endregion
MapToStoredProcedures(s =>
{
s.Insert(i => i.HasName("HomeownerContactDetailCreate_sp", "monarch"));
s.Update(u =>
{
u.HasName("HomeownerContactDetailUpdate_sp", "monarch");
u.Parameter(p => p.Id, "RelationKey");
u.Parameter(p => p.Version, "Version");
});
s.Delete(i =>
{
i.HasName("HomeownerContactDetailDelete_sp", "monarch");
i.Parameter(p => p.Id, "RelationKey");
i.Parameter(p => p.Version, "Version");
});
});
我在 .NET Core 中遇到的问题是没有 Map() 函数,也没有 MapToStoredProcedures() 函数。我不确定从这里去哪里将实体映射到两个单独的表,以及 EF Core 如何映射 procs(或者它甚至以相同的方式映射 procs)。
我尝试使用此代码进行实体拆分,但“m”lamba 表达式会生成一个 TableBuilder 对象,该对象只有 2 个方法,m.ExcludeFromMitigations() 和 m.GetType()。
pfeEntity.ToTable("dbo.PhoneFaxEmail");
pfeEntity.Property(b => b.Id).HasColumnName("RelationKey");
pfeEntity.Property(b => b.Value).HasColumnName("Value");
pfeEntity.ToTable("HomeownerContactDetails_vw", "monarch", m =>
{
m.Property(b => b.BlogId).HasColumnName("Id");
m.Property(b => b.Url);
});
任何帮助将不胜感激! (即使我完全以错误的方式处理这个问题,就像我说的,全新的并且想尽我所能学习 EFCore!)
【问题讨论】:
-
不幸的是,支持实体拆分或映射到存储过程。
-
@IvanStoev Dang!那太糟糕了,但很高兴我问了。如果您将其作为官方答案,我会标记它。