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; }
}


Entity Framework への製品マップ

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 が db を作成すると、ParentID列が出てきてNULL、という列が作成されParentProduct_ProductIdます。この列には、ParentId の正しい値が含まれています。

私は EF で Fluent API を使用するのが初めてなので、これは経験不足のせいです。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 に答える