EF Code First 6 和带有实体映射的多对多

EF Code First 6 and many-to-many with entity mapping

按照这个问题中的示例:How to create a many-to-many mapping in Entity Framework? 我想要一个 table 映射,我可以在其中添加或删除多对多关系,而无需通过 MediaContract 个实体。

基本上,我想要:

public class Media // One entity table
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Enabled { get; set; }

    public virtual ICollection<Contract> Contracts { get; set; }
}

public class Contract // Second entity table
{
    public int Id { get; set; }
    public string Code { get; set }

    public virtual ICollection<Media> Medias { get; set; }
}

public class ContractMedia // Association table implemented as entity
{
    public Media Media { get; set; }
    public int MediaId { get; set; }

    public Contract Contract { get; set; }
    public int ContractId { get; set; }
}

是否可以使用 FluentAPI 配置此场景?

afaik 不适用于 ContractMedia 实体,但您可以:

public class Media // One entity table
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Enabled { get; set; }

    public virtual ICollection<ContractMedia> Contracts { get; set; }
}

public class Contract // Second entity table
{
    public int Id { get; set; }
    public string Code { get; set }

    public virtual ICollection<ContractMedia> Medias { get; set; }
}

public class ContractMedia // Association table implemented as entity
{
    public Media Media { get; set; }
    public int MediaId { get; set; }

    public Contract Contract { get; set; }
    public int ContractId { get; set; }
}

public class Media // One entity table
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Enabled { get; set; }

    public virtual ICollection<Contract> Contracts { get; set; }
}

public class Contract // Second entity table
{
    public int Id { get; set; }
    public string Code { get; set }

    public virtual ICollection<Media> Medias { get; set; }
}

这将导致在数据库中创建非映射关联 table。