1

我有这样的事情:

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 表有三列:发送者、接收者和 Account_AccountId。虽然前两列没问题,但我不想要第三列,而且我不知道为什么 CodeFirst 创建它...你能帮我解决这个问题吗?

4

2 回答 2

1

ICollection<TransactionHistory>像in这样的集合Account将导致与它自己的外键 in 的第三个关系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 将消失。

于 2012-12-14T15:47:20.947 回答
0

我认为这样做会解决它。

[Column("ID")]
[Key]
public int Id { get; set; }

另外我会考虑将您的映射更改为s.MapKey("SenderAccountID")and s.MapKey("ReceiverAccountID")。让在您的数据库中工作的人的生活更轻松。

于 2012-12-14T15:23:08.077 回答