我有这样的事情:
public class Account
{
[Key]
public Guid AccountId { get; set; }
}
public class TransactionHistory
{
[Key]
public int Id { get; set; }
public Account Sender { get; set; }
public Account Receiver { get; set; }
}
我的模型构建器看起来像这样:
modelBuilder.Entity<TransactionHistory>()
.HasRequired(history => history.Sender)
.WithMany()
.Map(s => s.MapKey("Sender"))
.WillCascadeOnDelete(false);
modelBuilder.Entity<TransactionHistory>()
.HasRequired(history => history.Receiver)
.WithMany()
.Map(s => s.MapKey("Receiver"))
.WillCascadeOnDelete(false);
在我的数据库中,我的TransactionHistory表有三列:sender,receiver和Account_AccountId。虽然前两列是好的,但我不想要第三列,我不知道CodeFirst为什么创建它...你能帮我解决这个问题吗?
答案 0 :(得分:1)
ICollection<TransactionHistory>
中的Account
之类的集合将在Account
中与其自己的外键建立第三种关系。这是你看到的额外关键。如果您不想要第三个关系,则必须确定要将集合与Account
关联的导航属性。要么...
modelBuilder.Entity<TransactionHistory>()
.HasRequired(history => history.Sender)
.WithMany(account => account.TransactionHistories)
.Map(s => s.MapKey("Sender"))
.WillCascadeOnDelete(false);
...或...
modelBuilder.Entity<TransactionHistory>()
.HasRequired(history => history.Receiver)
.WithMany(account => account.TransactionHistories)
.Map(s => s.MapKey("Receiver"))
.WillCascadeOnDelete(false);
但不是两者兼而有之。或者删除集合属性,第三个FK将消失。
答案 1 :(得分:0)
我认为这样做会解决它。
[Column("ID")]
[Key]
public int Id { get; set; }
另外,我会考虑将您的映射更改为s.MapKey("SenderAccountID")
和s.MapKey("ReceiverAccountID")
。使在数据库中工作的人员的生活更轻松。