4

我正在尝试指定一个列名以将“外键”映射到使用 Fluent API。我正在连接到 SQL Express 的一个实例。我搜索过 Stack Overflow 和 Google,但许多不同的配置示例给了我相同的结果。


产品类别

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
    public virtual Product ParentProduct { get; set; }
    public virtual ICollection<Product> ChildProducts { get; set; }
}


实体框架的产品映射

public class ProductMap : EntityTypeConfiguration<Product>
{
    public ProductMap() {
        HasKey(p => p.ProductId);

        Property(p => p.Name)
            .IsRequired();

        // Self referencing foreign key association 
        Property(c => c.ParentId)
            .IsOptional();

    HasMany(c => c.ChildProducts)
        .WithOptional(c => c.ParentProduct)
        .HasForeignKey(c => c.ParentId);
    }
}


问题

当我运行程序并且 EF 创建数据库时,结果是ParentID列出来了NULL,它创建了一个名为ParentProduct_ProductId. 此列包含 ParentId 的正确值。

我不熟悉将 Fluent API 与 EF 一起使用,所以我将此归结为缺乏经验。如何让自动生成的列来填充ParentId列?

4

1 回答 1

1

试试这个解决方案:

public class ProductMap : EntityTypeConfiguration<Product>
{
    public ProductMap() {
        HasKey(p => p.ProductId);

        Property(p => p.Name)
            .IsRequired();

        // Self referencing foreign key association 
        Property(c => c.ParentId)
            .IsOptional();

        HasOptional(x => x.Parent)
            .WithMany(x => x.ChildProducts)
            .HasForeignKey(x => x.ParentId)
            .WillCascadeOnDelete(false);
    }
}
于 2013-10-23T17:38:49.113 回答