如何首先使用代码在流利的api中配置多个关系?

时间:2018-11-02 15:14:33

标签: c# entity-framework asp.net-web-api ef-code-first ef-fluent-api

我在运行代码时收到以下异常

  

一个类型的对象   'System.Collections.Generic.HashSet`1 [[SolutionName.ProjectName.Contract,   SolutionName.ProjectName,版本= 1.0.0.0,文化=中性,   无法设置或从值中删除PublicKeyToken = null]]'   类型的EntityReference的属性   “ SolutionName.ProjectName.Contract”。

我有两个表Contract表和Client表

<meta-data 
android:name="preloaded_fonts" 
android:resource="@array/preloaded_fonts" />  

因此,我们有3个导航属性可以从客户表中进行签约。来自客户表中的Contract1和Contract2将各有一行。 但是iam希望在合同集合中映射多个合同。我已经使用以下流利的api代码尝试了这一合同:

public partial class Contract
{
    public int ContractId { get; set; }
    public System.Guid Guid { get; set; }
    //nav props
    public virtual Client Client { get; set; }
}
public partial class Client
{
public int Id { get; set; }
public System.Guid Guid { get; set; }
public String ClientName { get; set; }
public Nullable<int> Contract1Id { get; set; } //foreign key pointing to ContractId
public Nullable<int> Contract2Id { get; set; } //foreign key pointing to ContractId
//nav props
public virtual ICollection<Contract> Contracts { get; set; }
public virtual Contract Contract1 { get; set; }
public virtual Contract Contract2 { get; set; }
}

我无法为我的场景正确配置流利的api。请提出一些建议

1 个答案:

答案 0 :(得分:1)

在这里,我与一位客户有很多合同。换句话说,客户可以在合同中拥有许多具有clientId作为FK的合同。因此,遵循简单的流利的API代码对我有用。

modelBuilder.Entity<Client>()
                    .HasOptional(c => c.Contracts)
                    .WithMany()
                    .HasForeignKey(b => b.Contract1Id);

        modelBuilder.Entity<Client>()
                   .HasRequired(c => c.Contracts)
                   .WithMany()
                   .HasForeignKey(b => b.Contract2Id);

        modelBuilder.Entity<Client>()
                    .HasMany(c => c.Contracts)
                    .WithRequired()
                    .HasForeignKey(a => a.ClientId);