gpt4 book ai didi

c# - Entity Framework 尝试在添加条目时显式添加 ID

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:23 25 4
gpt4 key购买 nike

通常,当使用 Entity Framework 添加条目时,它知道在 ID 列是身份键时忽略它。但是,出于某种原因,在向我的 Company 类添加关系后,每次 Entity Framework 尝试添加新的 Company 条目时,它都会尝试显式添加值为 0 的 ID,但失败了。此外,每当我尝试添加与 Company 类有关系的任何类的条目时,它都会因违反约束而失败。

这是公司类:

 public int Id { get; set; }
[Required]
public string Nombre { get; set; }
[ForeignKey("Customer")]
public int CustomerId { get; set; }
[ForeignKey("CompanyType")]
public string CompanyTypeCode{ get; set; }
/* more properties */

public virtual Parameters Parameters { get; set; }

当我将 Parameters 虚拟属性添加到类时,问题开始出现。这是参数类

public int Id { get; set; }
public int CompanyId { get; set; }
/* more stuff */
public virtual Company Company { get; set; }

另外,我必须定义与 Fluent API 的关系:

modelBuilder.Entity<Company>().HasRequired(e => e.Parameters).WithRequiredDependent(p => p.Company);

这是 Entity Framework 尝试执行的命令。请注意,它会尝试显式添加 Id 而不是忽略它:

INSERT [dbo].[Company]([Id], [Name], [CustomerId], [Code], [POS], [CompanyCode], [VAT], [Path], [ExpiryDate], [CreatedBy], [CreateDate], [UpdatedBy], [UpdateDate])
VALUES (@0, @1, @2, @3, @4, @5, @6, NULL, NULL, @7, @8, @9, @10)
-- @0: '0' (Type = Int32)
-- @1: 'asdasd' (Type = String, Size = -1)
-- @2: '9' (Type = Int32)
-- @3: '20222222223' (Type = String, Size = -1)
-- @4: ' 1' (Type = String, Size = -1)
-- @5: '1' (Type = String, Size = 128)
-- @6: '4' (Type = Int32)
-- @7: '24' (Type = Int32)
-- @8: '11/4/2017 17:46:22' (Type = DateTime2)
-- @9: '24' (Type = Int32)
-- @10: '11/4/2017 17:46:22' (Type = DateTime2)

最佳答案

映射...

modelBuilder.Entity<Company>()
.HasRequired(e => e.Parameters)
.WithRequiredDependent(p => p.Company);

...已经把Company变成了一个依赖实体,也就是说它不再创建自己的主键,而是等待Parameters得到一个主键然后将该值作为自己的主键(同时也是外键)。

我认为在您的情况下,此机制在某种程度上受到 Parameters.CompanyId 的阻碍,因此 EF 最终为 Company.Id 插入 0。但这并不重要,因为您应该反过来:Parameters 应该是依赖实体:

modelBuilder.Entity<Company>()
.HasRequired(e => e.Parameters)
.WithRequiredPrincipal(p => p.Company);

现在 Parameters 将有一个主键,它也是一个外键(到 Company),使 Parameters.CompanyId 变得多余。

顺便说一句,对类使用复数名称会造成混淆。

关于c# - Entity Framework 尝试在添加条目时显式添加 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355913/

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