简体   繁体   English

实体框架代码首先一对一可选

[英]Entity Framework code first one to one optional

I have relation one to one with following objects: 我与以下对象具有一对一的关系:

[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; }
}

In DbContext I have: 在DbContext中,我有:

    modelBuilder.Entity<Ecwid>().HasKey(p => p.ProjectId);
    modelBuilder.Entity<Project>().HasOptional(p => p.Ecwid).WithRequired(p => p.Project);

Problem: when I create Project, Entity Framework creates Ecwid object in database to, but I don't need this object. 问题:创建项目时,实体框架在数据库中创建Ecwid对象,但是我不需要此对象。 In DbContext I added "HasOptional", why EF creates Ecwid object for me? 在DbContext中,我添加了“ HasOptional”,为什么EF为我创建了Ecwid对象?

HasOptional means that EF must create new column which is nullable . HasOptional表示EF必须创建可为空的新列。 IF you don't want EF automatically creates a new column in database, then just map this realtionship to existing column: 如果您不希望EF在数据库中自动创建新列,则只需将此房地产映射到现有列即可:

modelBuilder.Entity<Project>()
            .HasOptional(p => p.Ecwid)
            .WithRequired(p => p.Project)
            .Map(x => x.MapKey("Ecwid_ID"));

Or, if your FK column in Ecwid table, then change your mapping as: 或者,如果您在Ecwid表中的FK列,则将映射更改为:

modelBuilder.Entity<Ecwid>()
            .HasRequired(p => p.Project)
            .WithOptional(p => p.Ecwid);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM