我有两张桌子。
CREATE TABLE [dbo].[BusinessUnit](
[BusinessUnitId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[CurrencyId] [int] NOT NULL);
CREATE TABLE [dbo].[Currency](
[CurrencyId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](35) NOT NULL,
[Country] [nvarchar](50) NOT NULL,
[Code] [nvarchar](50) NOT NULL);
我有一个实体
public class BusinessUnit
{
public int Id { get; set; }
public string Name { get; set; }
public int CurrencyId { get; set; }
public string CurrencyCode { get; set; }
}
我想使用Entity Splitting来引入dbo.Currency.Code字段。我的映射不起作用。这是映射。
class BusinessUnitMap : EntityTypeConfiguration<BusinessUnit>
{
public BusinessUnitMap()
{
Property(bu => bu.Id).HasColumnName("BusinessUnitId");
ToTable("BusinessUnit");
Map(map =>
{
map.Property(bu => bu.CurrencyId);
map.Property(bu => bu.CurrencyCode).HasColumnName("Code");
map.ToTable("Currency");
});
}
}
我尝试过其他一些变体。我无法弄清楚如何使映射工作。它不断在BusinessUnitId上生成SQL连接。我需要在CurrencyId上进行连接。
答案 0 :(得分:1)
对于您的情况,我认为您不能使用实体拆分,因为您有多对一的关系。你可以做这样的事情:
public class BusinessUnit
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Currency Currency { get; set; }
public string CurrencyCode { get { return Currency.Code; } }
}
public class Currency
{
public string Code { get; set; }
}
或使用相同的设置,DTO:
public class BusinessUnitDTO
{
public string Name { get; set; }
public string CurrencyCode { get; set; }
}
和扩展方法:
public static IQueryable<BusinessUnitDTO> GetBusinessUnitDTO(this IQueryable<BusinessUnit> q)
{
return q.Select(b => new BusinessUnitDTO
{
Name = b.Name,
CurrencyCode = b.Currency.Code,
};
}
如果您想要一个具有该组数据的单个对象,那么或其他效果。