Сначала я пытаюсь создать проект с использованием кода, но у меня проблема с внешними ключами. У меня действительно простой класс с навигационным свойством. Я попытался установить имя столбца внешнего ключа, но он не работает, вместо этого создается другой столбец.MVC привязка внешнего ключа
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);
}
Я также указан там, какой столбец для использования в качестве внешнего ключа, но как-то добавляя это приводит к созданию нового столбца.