EF 4.1 Code First POCO Library

时间:2011-08-22 10:58:49

标签: c# entity-framework c#-4.0 entity-framework-4

我想提一下,我是EF的新手。

我正在使用EF 4.1创建数据访问库。

对于每个实体,我有两个用于翻译目标的表。

ex:Events ==>阿拉伯语的Event_ar和英语的Event_en。

第一个问题:如果我写了两个相同实体类型的DbSets,我会出错#/ p>

所以我做了这项工作,这绝对不是很好:

public class Event_en : Event { }
public class Event_ar : Event { }

public class DB : DbContext
{
    public DbSet<Event_ar> Events_ar { get; set; }
    public DbSet<Event_en> Events_en { get; set; }
}

我想知道是否有解决方案吗?

第二个   实体应该与表名相同,否则我会有错误。

Ex:“dbo.Event_ar”应该有一个POCO“Event_ar”

它应该是与该表名称相同的属性名称。

此处:dbo.Events_ar ==&gt; POCO“Events_ar”

为什么我不能操纵这些名字?任何解决方案?

1 个答案:

答案 0 :(得分:1)

我不确定你的解决方案是否朝着正确的方向发展。为每种语言都有一个表是不对的 - 您可以简单地在事件表中添加另一列来指定语言是什么?

您可以使用此列检索具有所需语言的行。

关于表和POCO实体名称,您可以通过在类elvel中使用System.ComponentModel.TableAttribute覆盖实体映射到的表,但是为了维护POCO-ness我喜欢使用EntityTypeConfiguration类并指定表名。

例如:

public class CurrencyConfiguration : EntityTypeConfiguration<Currency>
    {
        public CurrencyConfiguration()
        {
            this.ToTable("Conv", "Ref");           
        }
    }

然后在DbContext上的OnModelCreating覆盖方法中将其添加到模型构建器。

public class MyContext : DbContext
{
    public DbSet<Currency> Currencies { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new CurrencyConfiguration());           
    }
}