C# 实体框架代码一对一可选
我与以下对象有一对一的关系:C# 实体框架代码一对一可选,c#,entity-framework,C#,Entity Framework,我与以下对象有一对一的关系: [DataContract(IsReference = true)] public class Ecwid { [Key, ForeignKey("Project")] [DataMember] public Guid ProjectId { get; set; } [DataMember] public string EcwidShopID { get; set; } public virtual Project
[DataContract(IsReference = true)]
public class Ecwid
{
[Key, ForeignKey("Project")]
[DataMember]
public Guid ProjectId { get; set; }
[DataMember]
public string EcwidShopID { get; set; }
public virtual Project Project { get; set; }
}
[DataContract]
public class Project : AuditInfoComplete
{
[Key]
[DataMember]
public Guid ProjectId { get; set; }
[DataMember]
public virtual Ecwid Ecwid { get; set; }
}
在这方面,我有:
modelBuilder.Entity<Ecwid>().HasKey(p => p.ProjectId);
modelBuilder.Entity<Project>().HasOptional(p => p.Ecwid).WithRequired(p => p.Project);
modelBuilder.Entity().HasKey(p=>p.ProjectId);
modelBuilder.Entity().HasOptional(p=>p.Ecwid).WithRequired(p=>p.Project);
问题:当我创建项目时,EntityFramework在数据库中创建Ecwid对象,但我不需要这个对象。在DbContext中,我添加了“HasOptional”,为什么EF会为我创建Ecwid对象?
HasOptional
意味着EF必须创建新的列,该列可以为空。如果不希望EF自动在数据库中创建新列,则只需将此关系映射到现有列:
modelBuilder.Entity<Project>()
.HasOptional(p => p.Ecwid)
.WithRequired(p => p.Project)
.Map(x => x.MapKey("Ecwid_ID"));
Use I get以下错误:“验证它是否未被明确地从模型中排除,并且它是有效的导航属性”。我不能在同一个属性上使用DataMember和NotMapping。@AndreyMykhaylov很乐意提供帮助。
modelBuilder.Entity<Ecwid>()
.HasRequired(p => p.Project)
.WithOptional(p => p.Ecwid);