首页 文章

EF迁移中的自定义外键

提问于
浏览
-1

有人请帮我解决这个错误:

无法确定类型'DataLayer.Data.SETTINGGRP'和'DataLayer.Data.SETTING'之间关联的主要结束 . 必须使用关系流畅API或数据注释显式配置此关联的主要结尾 .

我的代码:

public class BaseEntity 
{
    [Key]
    public long objectId { get; set; }    
}

public partial class SETTINGGRP: BaseEntity
{  
    public string REMARKS { get; set; } 
    public virtual SETTING SETTING { get; set; }
}

public partial class SETTING : BaseEntity
{ 
    public Nullable<long> SETTINGGRP_objectId { get; set; } 
    public string NAME { get; set; } 
    [ForeignKey("SETTINGGRP_objectId")]
    public virtual SETTINGGRP SETTINGGRP { get; set; } 
}

我已经提到了这个网址:https://msdn.microsoft.com/en-us/data/jj591620#RequiredToRequired

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<WORKERINFO>().HasKey(d => new { d.objectId, d.EMP_objectId });
        modelBuilder.Entity<WORKERINFO>().HasRequired(t => t.EMP).WithOptional(t => t.WORKERINFO);
    }

我希望objectId是主键,SETTINGGRP_objectId应该是外键 .

请建议我如何编写注释或流畅的api .

1 回答

  • 0

    看看你的代码, SETTINGGRPSETTING 似乎是一对一的关系 . 如果是这种情况,您可能需要配置关系 . 要做同样的事情,请参阅https://msdn.microsoft.com/en-us/data/jj591620#RequiredToRequired .

    然而,直观地(从实体的名称)看来,关系应该是一对多,即一个 SETTINGGRP 有很多 SETTING (但是,我可能是错的),在这种情况下,我认为只改变 SETTING 以下列方式在 SETTINGGRP 中的属性,将做的伎俩:

    public virtual ICollection<SETTING> SETTINGS { get; set; }
    

    我希望objectId是主键,SETTINGGRP_objectId应该是外键 .

    为此,请尝试使用Table-Per-Concrete Class (TPC) Inheritance,然后使用 HasKey()HasForeignKey() 指定主键和外键属性 .

相关问题