0
我試圖做一個自我引用表重新命名外鍵列在流暢API
public class Category
{
// PK
public int CategoryId { get; set; }
// Property
public string CategoryName { get; set; }
// FK
public int? ParentCategoryId { get; set; }
public virtual ICollection<Category> ParentCategories { get; set; }
public virtual ICollection<Product> Products { get; set; } // Product is defined later
}
和配置不工作:
public class CategoryConfiguration : EntityTypeConfiguration<Category>
{
public CategoryConfiguration():base()
{
HasKey(c => new { c.CategoryId });
HasOptional(c => c.ParentCategories)
.WithMany()
.HasForeignKey(c => c.ParentCategoryId);
}
}
的想法是使用ParentCategoryId
作爲列名,但它不起作用。相反,它生成一個名爲:Category_CategoryId
的列。
我曾嘗試使用.Map(c => c.MapKey("ParentCategoryId"))
,結果是一樣的。
我不認爲這是自參照的原因,因爲同樣的事情在許多一對多的關係發生了:
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
和Product
配置
public class ProductConfiguration:EntityTypeConfiguration<Product>
{
public ProductConfiguration():base()
{
// Many-to-Many
HasMany(c => c.Categories)
.WithMany()
.Map(p =>
{
p.MapLeftKey("ProductRefId");
p.MapRightKey("CategoryRefId");
p.ToTable("ProductCategory");
});
}
}
表名字是ProductCategories
而不是ProductCategory
外鍵是Product_ProductId
和Category_CategoryId
他們都沒有什麼期待。
我怎樣才能解決這個問題?請幫忙。
謝謝!
更新1
奇怪的是,如果我通過DbModelBuilder
定義它,然後它
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>()
.HasOptional(c => c.ParentCategories)
.WithMany()
.HasForeignKey(c => c.ParentCategoryId);
}
外鍵成爲ParentCategoryId
預期。
首先,不要調用空base(),它會在你的類中運行ctor之前被調用。其次,刪除這個HasKey(c => new {c.CategoryId});並只寫HasKey(c => c.CategoryId); 關於你的問題,db中列的名稱是什麼? – ivamax9
嗨,@Chase。謝謝你的建議。外鍵列名是'Category_CategoryId',我想使用'ParentCategoryId'作爲它的名字。 – Hao