我正在努力处理 Entity Framework 生成的复合键和额外字段。我有一个我认为很奇怪的问题。
假设我与这些类之间存在一对多关系:
文件(文件)
[Table("Dossier")]
public class Dossier
{
[Key]
public string Dossiernummer { get; set; }
[Key]
public string Dossierversie { get; set; }
[Required]
public string Dossierreferentie { get; set; }
[Required]
public string Relatienr { get; set; }
public ICollection<Artikel> Artikels { get; set; } ();
}
还有我的 artikel(文章)类:
[Table("Artikel")]
public class Artikel
{
[Key]
public string Artnr { get; set; }
[Key]
public string ArtVersie { get; set; }
public string ArtOmschrijving { get; set; }
public Dossier Dossier { get; set; }
public string Dossiernummer { get; set; }
}
我正在使用迁移和代码优先方法。出于某种原因,使用迁移会在 artikel 表中创建一个 dossiernummer1 列。我不明白为什么,希望它消失。有谁知道吗?
我不想拥有的另一件事是我的 artikel 表中的第二个主键。它将文件表中的两个键都放在 artikel 表中,但我只想将 Dossiernummer 用作外键。你知道怎么改吗?
当从上下文中获取所有文件时,我也注意到了一些奇怪的事情。当我查看文件对象时,文章列表是空的,即使数据库中存在相关数据。自己初始化正常吗?
感谢您提前提供任何帮助和信息。
亲切的问候,
最佳答案
您必须使用流畅的 API 来设置关系并添加 ColumnAttribute
来排序键:
[Table("Artikel")]
public class Artikel
{
[Key]
[Column(Order = 1)]
public string Artnr { get; set; }
[Key]
[Column(Order = 2)]
public string ArtVersie { get; set; }
public string ArtOmschrijving { get; set; }
public Dossier Dossier { get; set; }
public string Dossiernummer { get; set; }
}
[Table("Dossier")]
public class Dossier
{
[Key]
[Column(Order = 1)]
public string Dossiernummer { get; set; }
[Key]
[Column(Order = 2)]
public string Dossierversie { get; set; }
[Required]
public string Dossierreferentie { get; set; }
[Required]
public string Relatienr { get; set; }
public ICollection<Artikel> Artikels { get; set; }
}
在你的 dbcontext 中覆盖 OnModelCreating
方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
builder.Entity<Dossier>()
.HasMany(x => x.Artikels)
.WithOne(a => a.Dossier)
.HasForeignKey(a => new { a.Dossiernummer, a.Artnr });
builder.Entity<Artikel>()
.HasKey(x => new {x.Artnr,x.ArtVersie});
builder.Entity<Dossier>()
.HasKey(x => new {x.Dossiernummer,x.Dossierversie});
}
关于c# - Entity Framework 在数据库中添加了额外的字段。并添加复合键的两个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49454209/