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
Categories
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?
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With