MVC 外键绑定

MVC foreign key binding

我正在尝试先使用代码建立一个项目,但我遇到了外键问题。我有一个非常简单的 class,带有导航 属性。我尝试设置外键列名称但它不起作用,而是创建了另一列。

public class Point
{
    public int PointId { get; set; }

    public int AccountId { get; set; }

    [ForeignKey("AccountId")]
    public virtual Account Account { get; set; }

    public Decimal Balance { get; set; }
    public DateTime Date { get; set; }
    public int CategoryId { get; set; }

    [Required]
    public virtual Category Category { get; set; }
}

在我的迁移文件中:

CreateTable(
            "dbo.Points",
            c => new
                {
                    PointId = c.Int(nullable: false, identity: true),
                    AccountId = c.Int(nullable: false),
                    Balance = c.Decimal(nullable: false, precision: 18, scale: 2),
                    Date = c.DateTime(nullable: false),
                    CategoryId = c.Int(nullable: false),
                    Account_AccountId = c.Int(),
                })
            .PrimaryKey(t => t.PointId)
            .ForeignKey("dbo.Accounts", t => t.AccountId, cascadeDelete: true)
            .ForeignKey("dbo.Categories", t => t.CategoryId, cascadeDelete: true)
            .ForeignKey("dbo.Accounts", t => t.Account_AccountId)
            .Index(t => t.AccountId)
            .Index(t => t.CategoryId)
            .Index(t => t.Account_AccountId);

如您所见,创建了一个 Account_AccountId 列,但我希望我的 AccountId 列用作外键。

[编辑]

我发现我在 OnModelCreating 函数中添加的一些行是负责任的:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Point>()
            .HasRequired(c => c.Account)
            .WithMany().HasForeignKey(e => e.AccountId)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Category>()
            .HasRequired(s => s.Account)
            .WithMany().HasForeignKey(e => e.AccountId)
            .WillCascadeOnDelete(true);
    }

我还在那里指定了哪一列用作外键,但不知何故添加它会导致创建一个新列。

我找到了解决方案,我必须在 WithMany 方法中包含一个参数才能正常工作。

        modelBuilder.Entity<Point>()
            .HasRequired(c => c.Account)
            .WithMany(e=> e.Points).HasForeignKey(e => e.AccountId)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Category>()
            .HasRequired(s => s.Account)
            .WithMany(e=>e.Categories).HasForeignKey(e => e.AccountId)
            .WillCascadeOnDelete(true);