EntityFramework FluentAPI проблема с отображением - PullRequest
0 голосов
/ 22 декабря 2010

У меня есть следующий код:

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") {
        }
    }

}

проблема с этим сопоставлениемm => m.MapKey (p => p.pID, "Pointer_EntityDef2"));

БД не соблюдает соглашение, FK не Pointer_EntityDef2pId Возможно ли, чтобы в моем классе было только 1 свойство (Pointer_EntityDef2 типа EntityDef2) вместо 1 свойства для идентификатора и одно для объекта (этот работает нормально), а свойство иметь имя FK?И как должно выглядеть отображение?

1 Ответ

0 голосов
/ 22 декабря 2010

Этот свободный API дает вам желаемую схему (не нужно вызывать Map () после IsIndependent ()):

[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();
    }
}
...