EF 4.1代码优先映射问题

时间:2011-04-29 15:16:05

标签: c# entity-framework mapping ef-code-first entity-framework-4.1

我尝试将SitePage的ID映射到数据库列ID(SitePages表,bigint类型的ID列)的尝试都失败了。它一直在寻找列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 个答案:

答案 0 :(得分:1)

你没有做错任何事。您显示的代码正确完成所有操作。您甚至无需在ID中明确定义SitePage的名称,因为无论如何它都会定义为ID

对于为独立关联创建的外键,默认命名约定使用

SitePage_ID。那么SitePage和任何其他实体之间是否存在任何其他一对多关系?如果您未在依赖实体中映射外键,则默认情况下将其定义为SitePage_ID