将多个表映射到实体框架中的单个实体

时间:2012-03-20 13:55:35

标签: asp.net-mvc-3 entity-framework-4.1

在我正在处理的网站数据库中,我有两个表格,例如:Country& CountryLocale。这两个表包含以下列:

国家/地区:Id,经度,纬度 CountryLocale:Id,CountryId,CountryName,CultureId

我想要的是:
- 当我检索国家/地区时,我希望实体包含:CountryId,CountryName,CultureId,Latitude&经度。
- 当我创建一个新的国家/地区时,将一条记录插入表格国家/地区,将一条记录插入表格CountryLocale - 当我创建新的国家/地区区域设置时,仅在CountryLocale中创建记录

等等......

这可以实现吗? 感谢

2 个答案:

答案 0 :(得分:1)

您可以使用实体拆分来部分实现这一点。 CountryLocale会使用Country的PK作为其PK。没有CountryLocale,您无法插入Country。基本上它是一个单独的实体分成多个表。

    modelBuilder.Entity<Country>()
        .Map(mc =>
        {
            mc.Properties(n => new
            {
                n.Id,
                n.Longitude,
                n.Latitude
            });
            mc.ToTable("Country");
        })
        .Map(mc =>
        {
            mc.Properties(n => new
            {
                n.CountryName,
                n.CultureId
            });
            mc.ToTable("CountryLocale");
        });

答案 1 :(得分:0)

使用鉴别器(每层次表)

modelBuilder.Entity<CountryBase>()
    .Map<Country>(c => c.Requires("Type").HasValue((int)CountryType.Country))
    .Map<CountryLocale>(c => c.Requires("Type").HasValue((int)CountryType.CountryLocale));

您可以根据需要定义子实体