gpt4 book ai didi

C# 实体代码优先 : Unwanted foreign key created

转载 作者:行者123 更新时间:2023-11-30 16:40:03 25 4
gpt4 key购买 nike

我有一个与两者相关的“声明”表:

  • 一个“交易”表(在 IdStatement 上有一个外键)
  • “特定交易”表。 “SpecificTransaction”类继承自表“Transaction”

这是现有代码第一个模型:

  1. 表语句

    [Serializable]
    [Table("Statement", Schema = "dbo")]
    public class Statement
    {
    public Statement()
    {
    this.Transactions = new List<Transaction>();
    this.SpecificTransactions = new List<SpecificTransaction>();
    }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int IdStatement { get; set; }

    public List<Transaction> Transactions { get; set; }
    public List<SpecificTransaction> SpecificTransactions { get; set; }

    [... Other properties ...]
    }
  2. 表事务

    [Serializable]
    [Table("Transaction", Schema = "dbo")]
    public class Transaction
    {
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int IdTransaction { get; set; }

    [ForeignKey("Statement")]
    public Nullable<int> IdStatement { get; set; }

    [... Other properties ...]

    }
  3. Table SpecificTransaction(继承自Transaction)

    [Serializable]
    [Table("SpecificTransaction", Schema = "dbo")]
    public class SpecificTransaction : Transaction
    {

    [StringLength(255)]
    public string UniqueValue { get; set; }

    [StringLength(50)]
    public string Status { get; set; }

    [StringLength(50)]
    public string Hash { get; set; }

    [... Other properties ...]

    }

创建数据库时,在我的表 SpecificTransaction 上添加了一个不需要的字段(即列),称为“Statement_IdStatement”。

当我尝试添加包含 SpecificTransactions 的语句时,没有以下列:

  • 表事务 > 列 IdStatement
  • 表特定事务 > 列 Statement_IdStatement

正在由 IdStatement 填充,之后我必须添加 Id。

此外,当我在我的表“SpecificTransaction”上分配“IdStatement”时,只有“Statement_IdStatement”列被填充,而不是我的表语句的“IdStatement”。

有没有办法:

  • 避免创建“Statement_IdStatement”列并以这种方式保留我的 EF Code First 类? (或者至少,报表和交易表没有变化)

  • 当我添加包含 SpecificTransactions 的语句并保存更改时,“交易”>“IdStatement”列会自动填充吗?

提前致谢。

最佳答案

您正在获得额外的列 Statement_IdStatement因为你已经声明了第二个关系,直接在 Statement 之间和 SpecificTransaction模型类型,即通过属性 public List<SpecificTransaction> SpecificTransactions在你的 Statement类(class)。这足以导致 Entity Framework 创建一个额外的表列来映射一对多关系,这就是它被填充的原因。它不需要映射到额外的外键模型属性来实现。

您实际上可能不需要 Statement 上的额外属性.您实际上可以插入 SpecificTransaction对象进入 Transactions列出属性,映射将为您处理。

您可能已声明此属性以便只能访问 SpecificTransaction Statement 的对象.如果这是您的意图,您也可以使用 myStatement.Transactions.OfType<SpecificTransaction>() 访问它们.

关于C# 实体代码优先 : Unwanted foreign key created,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52036115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com