有人请帮我解决此错误:
无法确定类型'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。
答案 0 :(得分:0)
查看您的代码似乎SETTINGGRP
和SETTING
是一对一的关系。如果是这种情况,您可能需要配置关系。要做同样的事情,请参阅https://msdn.microsoft.com/en-us/data/jj591620#RequiredToRequired。
然而,直观地(从实体的名称)似乎关系应该是一对多,即一个SETTINGGRP
有许多SETTING
s(但是,我可能是错的),在这种情况下,我认为只有通过以下方式更改SETTING
中的SETTINGGRP
属性才能解决问题:
public virtual ICollection<SETTING> SETTINGS { get; set; }
我希望objectId是主键,SETTINGGRP_objectId应该是外键。
为此,请尝试使用Table-Per-Concrete Class (TPC) Inheritance,然后使用HasKey()
和HasForeignKey()
指定主键和外键属性。