实体框架使用列名设置主键

时间:2013-07-22 15:26:54

标签: .net c#-4.0 entity-framework-5

我首先使用实体​​框架代码,使用流畅的映射API。 我有一张名为“ENTITY'有3列

ENTITY1_ID int
ENTITY2_ID int
LEVEL   int

与相关模型

public class ENTITY
{
   public virtual ENTITY1 ENTITY1 {get; set;}
   public virtual ENTITY2 ENTITY2 {get; set;}
   public virtual int LEVEL {get; set;}
}

其中ENTITY1_ID和ENTITY2_ID是两个表的外键。 在映射代码中,我成功地声明了外键,而无需向实体类添加相关属性:

this.HasRequired(t => t.ENTITY1).WithMany().Map(m => m.MapKey("ENTITY1_ID"));
this.HasRequired(t => t.ENTITY2).WithMany().Map(m => m.MapKey("ENTITY2_ID"));

所以我只需要使用列名设置主键。使用类似的东西:

this.HasKey(new {"ENTITY1_ID", "ENTITY2_ID"});

我想这样做是为了避免使用持久性相关属性(ids ..)来污染我的模型。 是否可以在Entity Framework 5上执行此操作?

1 个答案:

答案 0 :(得分:-1)

如果这是一个多对多的表,那么你可以单独使用属性创建它(不需要流畅的映射)

public class Entity1
{
    public class Id { get; set; }
    // Other properties
}

public class Entity2
{
    public class Id { get; set; }
    // Other properties
}

这是加入表

public class EntityEntity
{
    [Key]
    [Column(Order = 1)]
    public int Entity1Id {get;set;}

    [Key]
    [Column(Order = 2)]
    public int Entity2Id {get;set;}

    public int Level {get; set;}

    public virtual Entity1 Entity1 {get; set;}
    public virtual Entity2 Entity2 {get; set;}
}

这就是你所需要的一切。剩下的“魔法”就是为你完成的。

请记住将这些添加到您的DbContext

public class DataContext : DbContext
{
    public DbSet<Entity1> Entity1s {get; set;}
    public DbSet<Entity2> Entity2s {get; set;}

    public DbSet<EntityEntity> EntityEntities {get; set;}        
}