首页 > 解决方案 > 实体框架 SaveChanges 中的异常?

问题描述

我正在尝试使用 Entity Framework 6 在 SQL 数据库中进行插入,但我遇到了无法解决的问题。

我不断收到的错误是:

UpdateException:“Connect.CompanyFinancialDetails”中的实体参与“Company_CompanyFinancialDetails”关系。找到 0 个相关的“Company_CompanyFinancialDetails_Source”。1 'Company_CompanyFinancialDetails_Source' 应为

我有这两个实体:

public class Company
{
    public long CUI { get; set; }

    public string UserName { get; set; }
    public string CompanyName { get; set; }
    public string Symbol { get; set; }
    public int? SharesCount { get; set; }
    public decimal? SharePrice { get; set; }

    public virtual Account Account { get; set; }
    public virtual CompanyFinancialDetails CompanyFinancialDetails { get; set; }
}

public class CompanyFinancialDetails
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    // other properties
    public decimal? NumberOfEmployees { get; set; }      
    public virtual Company Company { get; set; }
}

这是 Fluent API 配置:

    public DbSet<Account> SignUpModels { get; set; }
    public DbSet<Company> Companies { get; set; }

    public DbSet<CompanyFinancialDetails> CompanyFinancialDetails { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Account>()
           .HasKey(k => k.Id)
           .HasOptional(s => s.Company)
           .WithRequired(d => d.Account);

        modelBuilder.Entity<Company>()
           .HasKey(k => k.CUI)
           .HasOptional(s => s.CompanyFinancialDetails)
           .WithRequired(d => d.Company);
    }

我想要的关系是 1-many(一个Company有很多CompanyFinancialDetails)。

这是我将对象添加到数据库的代码:

Company co = Context.Find(username);

foreach (CompanyFinancialDetails s in c)
{                       
    s.Company = co;
}

a.CompanyFinancialDetails.AddRange(c);
a.SaveChanges();

我得到一个列表,并使用该方法CompanyFinancialDetails添加它们。AddRange我之前遇到过这个问题,我所做的是将虚拟属性对象添加到我想要插入数据库的对象中并且它起作用了。这就是我在这里尝试做的:该Find()方法获取与 相关的公司对象,CompanyFinancialDetails并且对于每个CompanyFinancialDetails 对象,一个Company虚拟属性正在添加相关的公司对象。

好吧,它不起作用,当SaveChanges()调用该方法时,我得到了那个错误。任何帮助,将不胜感激。

标签: c#sql-serverentity-framework-6

解决方案


推荐阅读