我想用代碼先映射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