C# EF代码首先为一个字段创建了两个属性
在数据库中,我有两个表-Show和Language。表中显示除其他外还有外键语言。它的一对多关系(节目有一种语言) 首先从ADO.NET实体数据模型运行代码时,会为语言字段创建两个属性:C# EF代码首先为一个字段创建了两个属性,c#,.net,entity-framework,C#,.net,Entity Framework,在数据库中,我有两个表-Show和Language。表中显示除其他外还有外键语言。它的一对多关系(节目有一种语言) 首先从ADO.NET实体数据模型运行代码时,会为语言字段创建两个属性: public class ShowModel { ... public LanguageModel Language1 {get; set;} public string Language {get; set;} ... } public class LanguageModel
public class ShowModel
{
...
public LanguageModel Language1 {get; set;}
public string Language {get; set;}
...
}
public class LanguageModel
{
...
public string Language {get; set;}
...
}
当我调试样本数据时,DB中语言字段的值被插入到字符串属性中
问题是——为什么它会生成这些属性?是因为我可以将Language对象添加到LanguageModel 1中,但从DB中,它总是写入string 1吗
编辑
modelBuilder.Entity<LanguageModel>()
.HasMany(e => e.Shows)
.WithOptional(e => e.Language1)
.HasForeignKey(e => e.Language);
modelBuilder.Entity<ShowModel>()
.Property(e => e.Language)
.IsUnicode(false);
modelBuilder.Entity()
.HasMany(e=>e.Shows)
.WithOptional(e=>e.Language1)
.HasForeignKey(e=>e.Language);
modelBuilder.Entity()
.Property(e=>e.Language)
.IsUnicode(假);
如果您暗示字段“Language”是“Laguage1”导航属性的Language表的外键,那么我可以给您几个指针:
modelBuilder.Entity<ShowModel>()
.HasRequired(t => t.Language1)
.WithMany(t => t.Shows)
.HasForeignKey(d => d.Language);
modelBuilder.Entity()
.HasRequired(t=>t.Language1)
.WithMany(t=>t.Shows)
.HasForeignKey(d=>d.Language);
如果您暗示字段“Language”是“Laguage1”导航属性的Language表的外键,那么我可以给您几个指针:
modelBuilder.Entity<ShowModel>()
.HasRequired(t => t.Language1)
.WithMany(t => t.Shows)
.HasForeignKey(d => d.Language);
modelBuilder.Entity()
.HasRequired(t=>t.Language1)
.WithMany(t=>t.Shows)
.HasForeignKey(d=>d.Language);
它不应该在那里,语言只能有它的id和字符串。这不是语言模型的一部分,它是ShowModel的一部分。语言生成正确我将编辑一点主要问题它不应该存在,语言只能有它的id和字符串这不是语言模型的一部分,它是ShowModel的一部分。语言生成正确我将编辑一点主要问题是的,这几乎就是“问题”。我不确定这是否真的是个问题,但我更想知道为什么会有这样的问题。第一:所以在DB中我把语言标记为PK,但这是生成的问题还是其他问题?No.2:模型生成器在实体ShowModel语言中仅标记为属性,但在LanguageModel实体中,它为与Show连接的ForeignKey创建了类似的代码(我将在主帖子中添加代码)。如果我理解得很好,如果我添加了这段代码,我可以删除fromShowModelLanguage属性并将其保留在Language模式中?也许我理解这个问题。字符串属性语言是数据库中字段的值,并与LanguageModel中的语言属性相连接?LanguageModel Language1是指向LanguageModel对象的指针吗?如果您不执行任何操作,EF会将Language属性视为标量属性(并将其保存为数据库中的字符串)。它将Language1视为导航属性,并在DB中为其创建外键(此属性在您的模型中不可见)。如果您想让Language成为导航属性Laguage1的FK属性,则必须告诉EF情况就是这样。在某些情况下,EF将从属性类型和命名(例如语言和LanguageId)中检测到这一点。但如果不确定,它会将它们视为不相关的属性,并生成“幕后”FK。如果这有助于您解决问题,请将此标记为您的答案。好的,现在我明白您的意思了。Language是数据库中外键属性的值(本例中为字符串)。Language1是实体LanguageModel的导航属性。您可以使用其中一个来更新实体之间的链接。EntityFramework默认情况下会同时公开这两个属性,因此当您想要更新节目时,可以选择使用FK属性,而不是生成整个语言对象,并且您知道FK.Yep,这几乎就是“问题”。我不确定这是否真的是个问题,但我更想知道为什么会有这样的问题。第一:所以在DB中我把语言标记为PK,但这是生成的问题还是其他问题?No.2:模型生成器在实体ShowModel语言中仅标记为属性,但在LanguageModel实体中,它为与Show连接的ForeignKey创建了类似的代码(我将在主帖子中添加代码)。如果我理解得很好,如果我添加了这段代码,我可以删除fromShowModelLanguage属性并将其保留在Language模式中?也许我理解这个问题。字符串属性语言是数据库中字段的值,并与LanguageModel中的语言属性相连接?LanguageModel Language1是指向LanguageModel对象的指针吗?如果您不执行任何操作,EF会将Language属性视为标量属性(并将其保存为数据库中的字符串)。它将Language1视为导航属性,并在DB中为其创建外键(此属性在您的模型中不可见)。如果您想让Language成为导航属性Laguage1的FK属性,则必须告诉EF