Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF 4.1代码优先映射问题_C#_Entity Framework_Mapping_Ef Code First_Entity Framework 4.1 - Fatal编程技术网

C# EF 4.1代码优先映射问题

C# EF 4.1代码优先映射问题,c#,entity-framework,mapping,ef-code-first,entity-framework-4.1,C#,Entity Framework,Mapping,Ef Code First,Entity Framework 4.1,将SitePage的ID映射到数据库列ID(SitePages表,ID列类型为bigint)的所有尝试均失败。它一直在寻找列SitePage\u ID来映射它。。你能看出我哪里做错了吗?所有相关代码如下 public class Site : EntityBase<Int64> { public virtual string Url { get; set; } public virtual IList<SitePage> Pages { get; set;

将SitePage的ID映射到数据库列ID(SitePages表,ID列类型为bigint)的所有尝试均失败。它一直在寻找列SitePage\u 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");

    }
}
公共类站点:EntityBase
{
公共虚拟字符串Url{get;set;}
公共虚拟IList页{get;set;}
}
公共类站点页面:EntityBase
{
公共虚拟站点站点{get;set;}
公共虚拟字符串Url{get;set;}
公共虚拟字符串Html{get;set;}
公共虚拟字符串文本{get;set;}
公共虚拟字符串语言{get;set;}
}
公共抽象类EntityBase:IComparable
{
公共虚拟T ID{get;set;}
受保护的EntityBase():此(默认值(T))
{ 
}
受保护的EntityBase(T id)
{
this.ID=ID;
if(this.ID==null)
this.ID=默认值(T);
}
}
公共类SpellCrawlerContext:DbContext
{
公共拼写crawlerContext(){}
公共数据库集站点{get;set;}
公共数据库集站点页面{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(s=>s.Pages)
.WithRequired(p=>p.Site)
.Map(s=>s.MapKey(“SiteID”);
modelBuilder.Entity()
.HasKey(p=>p.ID);
modelBuilder.Entity()
.Property(p=>p.ID)
.姓名(“ID”);
}
}

你没有做错任何事。您显示的代码可以正确地执行所有操作。您甚至不需要在
SitePage
中明确定义
ID
的名称,因为它的定义与
ID
类似


默认情况下,
SitePage\u ID
用于为独立关联创建的外键的命名约定。那么,在
SitePage
和任何其他实体之间是否存在其他一对多关系?如果您没有在依赖实体中映射外键,则默认情况下它将被定义为
SitePage\u ID

您能否澄清您所期望的表布局?您的代码在SitePages表上生成一个Site\u ID列,但在这两个表上都没有SitePages\u ID列。我使用了您提供的代码,并让EF生成数据库架构。它正确地生成了模式,我没有错误。提供的示例代码中是否缺少任何内容?我没有EF生成表。。我正在连接现有数据库。基本上每个表都有ID列作为主键/标识列。EntityBase上的ID直接映射到每个表的ID列。EF出于某种原因需要一个SitePage_ID列,即使我明确告诉它将SitePage类的ID属性映射到OnModelCreating上的ID列。。我猜我做错了,但我不知道是哪里的原因。谢谢Ladislav,我在SitePage上有公共虚拟IList子页面{get;set;}。。