Asp.net mvc EF代码首先在我的数据库中创建无用的列。为什么?

Asp.net mvc EF代码首先在我的数据库中创建无用的列。为什么?,asp.net-mvc,entity-framework,ef-code-first,Asp.net Mvc,Entity Framework,Ef Code First,我有这样的想法: public class Account { [Key] public Guid AccountId { get; set; } } public class TransactionHistory { [Key] public int Id { get; set; } public Account Sender { get; set; } publi

我有这样的想法:

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);
我的modelbuilder如下所示:

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);
modelBuilder.Entity()
.HasRequired(历史=>history.Sender)
.有很多
.Map(s=>s.MapKey(“发送方”))
.WillCascadeOnDelete(假);
modelBuilder.Entity()
.HasRequired(历史=>history.Receiver)
.有很多
.Map(s=>s.MapKey(“接收器”))
.WillCascadeOnDelete(假);

在我的数据库中,我的TransactionHistory表有三列:sender、receiver和Account\u AccountId。虽然前两列还可以,但我不想要第三列,我也不知道CodeFirst为什么要创建它。。。你能帮我解决这个问题吗?

我想这样做可以解决问题

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

<>我也会考虑将您的映射更改为<代码> S.MaMKEY(“SunDealCudid”)< /C>和<代码> S.MaMKEY(“收件人帐户”)< /代码>。使在您的数据库中工作的人的生活更轻松。

我认为这样做会解决问题

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

<>我也会考虑将您的映射更改为<代码> S.MaMKEY(“SunDealCudid”)< /C>和<代码> S.MaMKEY(“收件人帐户”)< /代码>。使数据库中的工作人员的生活更轻松。

帐户中的
ICollection
这样的集合将导致与帐户中自己的外键建立第三种关系。这是您看到的附加密钥。如果不需要第三种关系,则必须决定要将集合与
帐户中的哪个导航属性关联。要么

modelBuilder.Entity<TransactionHistory>()
            .HasRequired(history => history.Sender)
            .WithMany(account => account.TransactionHistories)
            .Map(s => s.MapKey("Sender"))
            .WillCascadeOnDelete(false);
modelBuilder.Entity()
.HasRequired(历史=>history.Sender)
.WithMany(account=>account.TransactionHistory)
.Map(s=>s.MapKey(“发送方”))
.WillCascadeOnDelete(假);
……或者

modelBuilder.Entity<TransactionHistory>()
            .HasRequired(history => history.Receiver)
            .WithMany(account => account.TransactionHistories)
            .Map(s => s.MapKey("Receiver"))
            .WillCascadeOnDelete(false);
modelBuilder.Entity()
.HasRequired(历史=>history.Receiver)
.WithMany(account=>account.TransactionHistory)
.Map(s=>s.MapKey(“接收器”))
.WillCascadeOnDelete(假);

但不是两者都有。或者删除collection属性,第三个FK将消失。

类似于
帐户中的
ICollection
的集合将导致与
帐户中自己的外键的第三个关系。这是您看到的附加密钥。如果不需要第三种关系,则必须决定要将集合与
帐户中的哪个导航属性关联。要么

modelBuilder.Entity<TransactionHistory>()
            .HasRequired(history => history.Sender)
            .WithMany(account => account.TransactionHistories)
            .Map(s => s.MapKey("Sender"))
            .WillCascadeOnDelete(false);
modelBuilder.Entity()
.HasRequired(历史=>history.Sender)
.WithMany(account=>account.TransactionHistory)
.Map(s=>s.MapKey(“发送方”))
.WillCascadeOnDelete(假);
……或者

modelBuilder.Entity<TransactionHistory>()
            .HasRequired(history => history.Receiver)
            .WithMany(account => account.TransactionHistories)
            .Map(s => s.MapKey("Receiver"))
            .WillCascadeOnDelete(false);
modelBuilder.Entity()
.HasRequired(历史=>history.Receiver)
.WithMany(account=>account.TransactionHistory)
.Map(s=>s.MapKey(“接收器”))
.WillCascadeOnDelete(假);


但不是两者都有。或者删除collection属性,第三个FK将消失。

您的
帐户
类中是否有collection属性(如
ICollection
)?是的,但只有一个集合。(之前我有两个,只是为了避免这个错误,我把发送者和接收者分别映射到它们中的每一个)@Slauma,好吧。我很笨,我不知道我想怎么做。在
Account
类中删除了单个集合,并且它可以正常工作。谢谢。您的
帐户
类中是否有收藏属性(如
ICollection
)?是的,但只有一个收藏。(之前我有两个,只是为了避免这个错误,我把发送者和接收者分别映射到它们中的每一个)@Slauma,好吧。我很笨,我不知道我想怎么做。在
Account
类中删除了单个集合,并且它可以正常工作。谢谢。但我不想更改我的key属性,EF只是添加了另一个我不想在那里的columnt。但我不想更改我的key属性,EF只是添加了另一个我不想在那里的columnt。它可以工作,但现在我在尝试
context.Transactions.Add(history)时遇到了另一个错误,我得到一个异常,即“Db.Transactions”中的
实体参与“TransactionHistory\u Sender”关系找到0个“相关”TransactionHistory\u发件人\u目标。在交易历史记录与发送者之间\u目标“1”是预期的。
这是什么意思O。o@ojek:这可能意味着
历史记录。发送方
,是吗?是。它是。但应该是这样的。我想把账户放在那里,但我也不想把任何东西放在那里。我该怎么做?.HasRequired必须进入。HasOptional。谢谢!:)@ojek:我只是想写:)它可以工作,但现在我在尝试
context.Transactions.Add(history)时遇到了另一个错误,我得到一个异常,即“Db.Transactions”中的
实体参与“TransactionHistory\u Sender”关系找到0个“相关”TransactionHistory\u发件人\u目标。在交易历史记录与发送者之间\u目标“1”是预期的。
这是什么意思O。o@ojek:这可能意味着
历史记录。发送方
,是吗?是。它是。但应该是这样的。我想把账户放在那里,但我也不想把任何东西放在那里。我该怎么做?.HasRequired必须进入。HasOptional。谢谢!:)@奥杰克:我只是想写:)