实体框架Fluent API映射问题

时间:2010-12-22 07:22:24

标签: entity-framework-4 mapping fluent-interface

我有以下代码:

namespace DynamicAssembly {
    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Data.Objects;
    using System.Data.EntityClient;
    using System.Data.Entity;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity.ModelConfiguration;
    using System.Data.Entity.Infrastructure;


    [Table("eElementDef1")]
    public class ElementDef1  {

          public int pID { get; set; }
              public virtual ElementDef2  Pointer_EntityDef2 { get; set; }
              public virtual ElementDef1  Poniter_EntityDef1 { get; set; }

        public ElementDef1() {
        }
    }

    [Table("eElementDef2")]
    public class ElementDef2 {


          public int pID { get; set; }
          public String  Name { get; set; }

        public ElementDef2() {
        }
    }

    public class Context : System.Data.Entity.DbContext {

          public DbSet<ElementDef1>  ElementDef1 
            { 
               get;set;
            }
          public DbSet<ElementDef2>  ElementDef2 
            { 
               get;set;
            }

      protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
                  modelBuilder.Entity<ElementDef1>().HasKey(c => c.pID);

modelBuilder.Entity<ElementDef1>().HasRequired(p => p.Pointer_EntityDef2)
                                                                        .WithMany()
                                                                        .IsIndependent()
                                                                        .Map(m => m.MapKey(p => p.pID, "Pointer_EntityDef2")); 


modelBuilder.Entity<ElementDef1>().HasRequired(p => p.Poniter_EntityDef1)
                                                                        .WithMany()
                                                                        .IsIndependent()
                                                                        .Map(m => m.MapKey(p => p.pID, "Poniter_EntityDef1")); 

          modelBuilder.Entity<ElementDef2>().HasKey(c => c.pID);



        }

        public Context() : 
                base("DynamicDefinitionConnection") {
        }
    }

}

问题出在这个映射上 modelBuilder.Entity()。HasRequired(p =&gt; p.Pointer_EntityDef2) 。和很多() .IsIndependent() .Map(m =&gt; m.MapKey(p =&gt; p.pID,“Pointer_EntityDef2”));

db不遵守约定,FK不是Pointer_EntityDef2pId 是否有可能在我的类中只有1个属性(EntityDef2类型的Pointer_EntityDef2)而不是id的1个属性和对象的一个​​属性(这个工作正常),以及具有FK名称的属性?那个映射应该怎么样?

1 个答案:

答案 0 :(得分:0)

这个流畅的API为您提供了所需的架构(在IsIndependent()之后无需调用Map()):

[Table("eElementDef1")]
public class ElementDef1
{
    public int pID { get; set; }
    public virtual ElementDef2 Pointer_EntityDef2 { get; set; }
    public virtual ElementDef1 Poniter_EntityDef1 { get; set; }
}

[Table("eElementDef2")]
public class ElementDef2
{
    public int pID { get; set; }
    public String Name { get; set; }
}

public class StackoverflowContext : DbContext
{
    public DbSet<ElementDef1> ElementDef1s { get; set; }
    public DbSet<ElementDef2> ElementDef2s { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
      modelBuilder.Entity<ElementDef1>().HasKey(c => c.pID);
      modelBuilder.Entity<ElementDef2>().HasKey(c => c.pID);

      modelBuilder.Entity<ElementDef1>().HasRequired(p => p.Pointer_EntityDef2)
                                        .WithMany()
                                        .IsIndependent();

      modelBuilder.Entity<ElementDef1>().HasRequired(p => p.Poniter_EntityDef1)
                                        .WithMany()
                                        .IsIndependent();
    }
}
相关问题