实体拆分以及如何配置连接
Entity Splitting and How to Configure the Join
我有两个表。
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");
});
}
}
我已经尝试了其他一些变体。我不知道如何让映射工作。它不断生成 SQL 加入 BusinessUnitId。我需要在 CurrencyId 上进行连接。
对于你的情况,我认为你不能使用实体拆分,因为你有一个多对一的关系。您也许可以这样做:
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,
};
}
如果你想要一个包含该组数据的对象,或者类似的东西。
我有两个表。
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");
});
}
}
我已经尝试了其他一些变体。我不知道如何让映射工作。它不断生成 SQL 加入 BusinessUnitId。我需要在 CurrencyId 上进行连接。
对于你的情况,我认为你不能使用实体拆分,因为你有一个多对一的关系。您也许可以这样做:
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,
};
}
如果你想要一个包含该组数据的对象,或者类似的东西。