问题
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:
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);
}
来源:https://stackoverflow.com/questions/14729294/entity-framework-creates-underscore-column-when-generating-database