max*_*pan 6 c# entity-framework-core
我收到以下错误。
消息:Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时出错。有关详细信息,请参阅内部异常。----> System.Data.SqlClient.SqlException:无效的列名“EmploymentTypeEntityEmploymentTypeID”。
奇怪的是它结合了我的实体类名称和实体属性名称。
下面是我的代码。
系统测试文件
using (var transaction = _referenceDataDbContext.Database.BeginTransaction())
{
_referenceDataDbContext.EmploymentType.AddRangeAsync(
new EmploymentTypeEntity
{
EmploymentTypeID = 1,
EmploymentType = "EmploymentType",
CategoryTypeID = 27,
SiteAddress = null,
CreatedBy = "UnitTest",
CreatedOn = DateTime.Now,
ModifiedBy = "UnitTest",
ModifiedOn = DateTime.Now,
RowVersion = new RowVersion(1),
EmploymentTypeGroups = new[]
{
new EmploymentTypeGroupEntity
{
EmploymentTypeGroupID = 11, GroupName = "Child Care", IsActive = true
}
}
}
}
);
_referenceDataDbContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [ref].[EmploymentType] ON");
_referenceDataDbContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
就业类型组.cs
public class EmploymentTypeGroupEntity
{
[Key]
public int? EmploymentTypeGroupID { get; set; }
public string GroupName { get; set; }
public bool? IsActive { get; set; }
public DateTime? CreatedOn { get; set; }
public string CreatedBy { get; set; }
public DateTime? ModifiedOn { get; set; }
public string ModifiedBy { get; set; }
[Timestamp]
[ConcurrencyCheck]
public byte[] RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
就业类型.cs
public class EmploymentTypeEntity
{
[Key]
public int? EmploymentTypeID { get; set; }
public string EmploymentType { get; set; }
public int? CategoryTypeID { get; set; }
public bool? SiteAddress { get; set; }
public IEnumerable<EmploymentTypeGroupEntity> EmploymentTypeGroups { get; set; }
public DateTime? CreatedOn { get; set; }
public string CreatedBy { get; set; }
public DateTime? ModifiedOn { get; set; }
public string ModifiedBy { get; set; }
[Timestamp]
[ConcurrencyCheck]
public byte[] RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
DataDbContext.cs
public class ReferenceDataDbContext : DbContext
{
public ReferenceDataDbContext(DbContextOptions<ReferenceDataDbContext> options)
: base(options)
{
}
public ReferenceDataDbContext()
{
}
public virtual DbSet<EmploymentTypeEntity> EmploymentType { get; set; }
public virtual DbSet<EmploymentTypeGroupEntity> EmploymentTypeGroup { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<StateEntity>().ToTable("State", "ref");
builder.Entity<EmploymentTypeGroupEntity>().ToTable("EmploymentTypeGroup", "ref");
builder.Entity<EmploymentTypeEntity>().ToTable("EmploymentType","ref").HasMany(a => a.EmploymentTypeGroups);
// Configure database attributes
}
}
Run Code Online (Sandbox Code Playgroud)
您正在EmploymentTypeGroupEntity和之间创建关系EmploymentTypeEntity。但是您并没有告诉实体框架这种关系是什么。EF 已经猜到您想要EmploymentTypeEntity在EmploymentTypeGroupEntity表中引用并为此创建一个字段。这显然不是你想要的。
你需要告诉EF这种关系是什么。如果是一对多的关系,其中一个EmploymentTypeEntity可以有多个EmploymentTypeGroupEntity,则似乎是这种情况,因为您已经定义了:
public IEnumerable<EmploymentTypeGroupEntity> EmploymentTypeGroups { get; set; }
Run Code Online (Sandbox Code Playgroud)
您还需要在您的EmploymentTypeGroupEntity班级中创建一个外键。所以添加到这个类:
public int EmploymentTypeEntityID { get; set; }
[ForeignKey(nameof(EmploymentTypeEntityID))]
public EmploymentTypeEntity EmploymentTypeEntity { get; set; }
Run Code Online (Sandbox Code Playgroud)
在您的EmploymentTypeEntity课程中更改集合类型:
public ICollection<EmploymentTypeGroupEntity> EmploymentTypeGroups { get; set; }
Run Code Online (Sandbox Code Playgroud)
添加构造函数以将 a 分配new List<EmploymentTypeGroupEntity>()给EmploymentTypeGroups。
更改测试中的数组分配以添加到集合并将外键添加到组创建中。
| 归档时间: |
|
| 查看次数: |
3880 次 |
| 最近记录: |