我想用代码先映射EF中的现有数据库。提供者(jetEntityFrameworkProvider)首先不支持DB。手动映射1到多个关系
我试图映射表“组件”(1)表“ComponentText”(很多)
这是我
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Component>().Map(m =>
{
m.Properties(p => new { p.ComponentText });
m.ToTable("ComponentText");
});
modelBuilder.Entity<ComponentText>().HasKey(t => t.ComponentCounter);
}
当我运行它,我得到后续错误
System.InvalidOperationException:‘上型‘组件’“属性’ComponentText不能被映射,因为它已被明确地从模型中排除,或者它是不被DbModelBuilderVersion被支持的类型的用过的。'
这些都是我的模型只与相关属性
组件
[Table("Component")]
public class Component
{
[Key]
[Column("Counter")]
public int Id { get; set; }
[Column("Name")]
public virtual ICollection<ComponentText> ComponentText { get; set; }
}
ComponentText
[Table("ComponentText")]
public class ComponentText
{
[Key]
[Column("Counter")]
public int Id { get; set; }
public int TextId { get; set; }
public string Text { get; set; }
//** Foreign Key
public int ComponentCounter { get; set; }
}
ETA:
我每次后背改变了我的代码回答。但是,它仍然无法正常工作。我尝试了几个变化。 .HasRequired(),.HasOptional()。
注意我删除了m.ToTable(“ComponentText”);由于Component已经在类中映射到“Component”表中。
我得到0的结果,并在结果视图收到此错误
错误=功能评价要求所有线程运行。
如果我取消了部分线路在评论modelBuilder.Entity<ComponentText>().HasKey(t => t.ComponentCounter);
我得到这个错误
Component_ComponentText_Target:多重不是在关系中的作用“Component_ComponentText_Target 'Component_ComponentText' 有效。由于依赖角色是指关键属性,所以依赖角色的多重性的上界必须是'1'。
public class ProjectContext : DbContext
{
private DbConnection con = new JetConnection();
public ProjectContext() : base(new JetConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = 'C:\Users\Ben-Laptop\Desktop\Test-Project.sep'; User Id = Admin; Jet OLEDB:Database Password = SEEME;"), true)
{
Database.SetInitializer<ProjectContext>(null);
}
public DbSet<Component> Components { get; set; }
public DbSet<Content> Contents { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Component>().HasMany(p => p.ComponentText).WithOptional().HasForeignKey(p => p.ComponentCounter);
//modelBuilder.Entity<ComponentText>().HasKey(t => t.ComponentCounter);
}
}
后背:T帽子让我进一步,但我仍然有问题。请参阅我的编辑。 – TheColonel26
@ TheColonel26你不需要'modelBuilder。Entity()。HasKey(t => t.ComponentCounter);'。你的主键是'Id' –
Backs
好吧,那就解释了。然而,当我评论说,我仍然得到零组件的结果。而之前,我得到了223. – TheColonel26