0

我正在使用实体框架代码前 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 上做到这一点?

4

1 回答 1

-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;}        
}
于 2013-07-22T15:39:34.217 回答