Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework creates underscore column when generating database

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?

like image 561
Jeremy Jarrell Avatar asked Feb 06 '13 12:02

Jeremy Jarrell


1 Answers

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);
}
like image 116
Sergey Berezovskiy Avatar answered Sep 21 '22 10:09

Sergey Berezovskiy