多对多映射没有创建正确的表

时间:2012-08-30 20:48:02

标签: c# .net ef-code-first entity-framework-5

我有一个模板

public class Template
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
    public virtual Template RelatedTemplate { get; set; }
    public virtual Field RelatedTemplatePrimaryField { get; set; }
    public virtual ICollection<Field> Fields { get; set; }
}

字段

public class Field
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Min { get; set; }
    public int Max { get; set; }
    public bool AllowEmpty { get; set; }
    public bool IsCollection { get; set; }
    public virtual ICollection<Template> Templates { get; set; }
}

问题是它没有创建多对多的关系,它只是在字段表上添加了一个FK,我想要多对多的关系

Fields ICollection<Field> Fields

ICollection<Template> Templates

编辑: 如果我删除

public virtual Template RelatedTemplate { get; set; }
public virtual Field RelatedTemplatePrimaryField { get; set; }

它有效......有什么想法吗?

1 个答案:

答案 0 :(得分:4)

在这种情况下,您必须帮助EF正确识别您的关系。您可以通过数据注释来实现:

[InverseProperty("Fields")]
public virtual ICollection<Template> Templates { get; set; }

或通过fluent-API:

modelBuilder.Entity<Template>()
            .HasMany(t => t.Fields)
            .WithMany(f => f.Templates);