【发布时间】:2017-06-21 02:56:39
【问题描述】:
我正在尝试首先使用代码映射 EF 中的现有数据库。提供者(jetEntityFrameworkProvider)不支持DB优先。
我正在尝试将表“组件”(1)映射到表“组件文本”(很多)
这就是我所拥有的
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:“无法映射类型“组件”上的属性“组件文本”,因为它已从模型中显式排除,或者它属于正在使用的 DbModelBuilderVersion 不支持的类型。'
这些是我的模型,只有相关属性
组件
[Table("Component")]
public class Component
{
[Key]
[Column("Counter")]
public int Id { get; set; }
[Column("Name")]
public virtual ICollection<ComponentText> ComponentText { get; set; }
}
组件文本
[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; }
}
预计到达时间:
我已经根据 Backs 的回答更改了我的代码。但是,它仍然无法正常工作。我尝试了几种变体。 .HasRequired()、.HasOptional()。
注意我删除了 m.ToTable("ComponentText");因为组件已经在类中映射到“组件”表。
我得到 0 个结果并在结果视图中收到此错误
错误 = 函数评估需要所有线程运行。
如果我取消注释 modelBuilder.Entity<ComponentText>().HasKey(t => t.ComponentCounter); 中的部分行
我收到这个错误
Component_ComponentText_Target::多重性在关系“Component_ComponentText”中的角色“Component_ComponentText_Target”中无效。因为从属角色是指关键属性,所以从属角色的多重性的上限必须是'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);
}
}
【问题讨论】:
标签: entity-framework