EF 4.1 Code First Mapping Problem - PullRequest
       33

EF 4.1 Code First Mapping Problem

3 голосов
/ 29 апреля 2011

Все мои попытки сопоставить идентификатор SitePage с идентификатором столбца базы данных (таблица SitePages, столбец идентификатора типа bigint) не увенчались успехом.Он продолжает искать столбец SitePage_ID для сопоставления .. Можете ли вы увидеть, где я делаю неправильно?Весь связанный код ниже;

public class Site : EntityBase<Int64>
{
    public virtual string Url { get; set; }
    public virtual IList<SitePage> Pages { get; set; }
}

public class SitePage : EntityBase<Int64>
{
    public virtual Site Site { get; set; }

    public virtual string Url { get; set; }
    public virtual string Html { get; set; }
    public virtual string Text { get; set; }
    public virtual string Language { get; set; }
}

public abstract class EntityBase<T> : IComparable
{

    public virtual T ID { get; set; }

    protected EntityBase() : this(default(T)) 
    { 
    }

    protected EntityBase(T id)
    {
        this.ID = id;

        if (this.ID == null)
            this.ID = default(T);
    }
}

public class SpellCrawlerContext : DbContext
{
    public SpellCrawlerContext(){}

    public DbSet<Site> Sites { get; set; }

    public DbSet<SitePage> SitePages { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Site>()
            .HasMany(s => s.Pages)
            .WithRequired(p => p.Site)
            .Map(s => s.MapKey("SiteID"));

        modelBuilder.Entity<SitePage>()
            .HasKey(p => p.ID);

        modelBuilder.Entity<SitePage>()
            .Property(p => p.ID)
            .HasColumnName("ID");

    }
}

1 Ответ

1 голос
/ 30 апреля 2011

Вы не делаете ничего плохого. Код, который вы показали, все делает правильно. Вам даже не нужно явно определять имя ID в SitePage, потому что оно все равно будет определено как ID.

SitePage_ID используется по умолчанию для именования внешних ключей, созданных для независимых ассоциаций. Так есть ли у вас какое-либо другое отношение один-ко-многим между SitePage и какой-либо другой сущностью? Если вы не отобразили внешний ключ в зависимом объекте, он будет определен как SitePage_ID по умолчанию.

...