Entity Framework creates underscore column when ge

2020-07-10 03:16发布

I have a simple object model as follows...

public class Product
{
    public long ProductId { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

and

public class Category
{
    public long CategoryId { get; set; }
    public List<Product> Products { get; set; }
}

Generating the underlying database with EntityFramework results in the following schema...

Products

  • ProductId
  • CategoryId
  • Category_CategoryId

Categories

  • CategoryId

In the Products table, the CategoryId column is always set to 0 while the Category_CategoryId column contains the id of the category the product belongs to.

How do I cause the category id to be set in the CategoryId column and prevent the Category_CategoryId column from being generated?

1条回答
一夜七次
2楼-- · 2020-07-10 03:45

Apply ForeignKey attribute to Category OR CategoryId property. And change CategoryId property type to match CategoryId of Category class (both should be long or int).

public class Product
{
    public long ProductId { get; set; }
    public long CategoryId { get; set; }
    [ForeignKey("CategoryId")]
    public Category Category { get; set; }
}

public class Category
{
    public long CategoryId { get; set; }
    public List<Product> Products { get; set; }
}

OR

public class Product
{
    public long ProductId { get; set; }
    [ForeignKey("Category")]
    public long CategoryId { get; set; }
    public Category Category { get; set; }
}

You can do same via fluent mapping:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>()
        .HasRequired(p => p.Category)
        .WithMany(c => c.Products)
        .HasForeignKey(p => p.CategoryId)
        .WillCascadeOnDelete(false);

    base.OnModelCreating(modelBuilder);
}
查看更多
登录 后发表回答