我正在使用基于ASP / ADO.NET的应用程序和数据结构,我正在将其中的一部分转换为ASP.NET MVC . 在数据结构中,存在“可选的一对一”关系,其中两个表使用相同的主键和名称 . 基本上,这个表可以被认为是主表的“可选扩展” . 以下是模型的示例:
public class ZoneMedia
{
public int ZoneMediaID { get; set; }
public string MediaName { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public virtual ZoneMediaText MediaText { get; set; }
}
public class ZoneMediaText
{
public int ZoneMediaID { get; set; }
public string Text { get; set; }
public int Color { get; set; }
}
显然,EF 4.1代码首先会自动映射这个问题 . 所以我意识到我必须明确指定映射 . 我试过这个:
modelBuilder.Entity<ZoneMedia>()
.HasOptional(zm => zm.ZoneMediaText);
modelBuilder.Entity<ZoneMediaText>()
.HasRequired(zmt => zmt.ZoneMedia)
.WithRequiredDependent(zm => zm.ZoneMediaText)
.Map(m => m.MapKey("ZoneMediaID"));
但它仍然给我一个关于主键名称的例外 .
Schema specified is not valid. Errors:
(199,6) : error 0019: Each property name in a type must be unique. Property name 'ZoneMediaID' was already defined.
我有点难过 . 我需要适应这种我在EF 4.1中实现的非常规结构,只需在可选关系中添加一个唯一的PK并在主表中保存外键关系就容易得多,但我无法更改数据库布局 . 任何意见,将不胜感激 .
1 回答
我希望我理解得很好 .
这对我有用:
这正确地在ZomeMediaTexts表中创建FK_ZoneMediaTexts_ZoneMedias_ZoneMediaID,并且外键是主键 .
编辑:也许值得指出我使用的是EF 4.3.0