0

我在 ASP.NET MVC 中使用实体框架 6.1。

我的模型是:

public class Article
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public double Price { get; set; }

    [InverseProperty("Article")]
    public virtual ICollection<FormulaItem> FormulaItem { get; set; }
}

public class FormulaItem
{
    [Key]
    [Column(Order = 0)]
    public int Id { get; set; }

    [ForeignKey("IdMaster")]
    public virtual Formula Formula { get; set; }
    public int IdMaster { get; set; }

    [ForeignKey("IdArticle")]
    public virtual Article Article { get; set; }
    public int IdArticle { get; set; }

    public string Comment { get; set; }
    public int Count { get; set; }
}

public class Formula
{
    [Key]
    [Column(Order = 0)]

    public int Id { get; set; }
    public FormulaMode Mode { get; set; }

    // Wen add this line I get error  
    //[ForeignKey("IdArticle")]        
    //public virtual Article Article { get; set; }
    //public int? IdArticle { get; set; }               

    public string Comment { get; set; }
    public virtual IList<FormulaItem> Items { get; set; }

    public Formula()
    {
        Items = new List<FormulaItem>();
    }
}   

此示例工作正常,但添加新 poco 时:

    // When I add this line in class formula I get error  
    [ForeignKey("IdArticle")]        
    public virtual Article Article { get; set; }
    public int? IdArticle { get; set; } 

上课Formula我得到错误:

Formula_Items_Source_Formula_Items_Target: : 关系约束中的从属角色和主要角色中的属性数量必须相同

4

2 回答 2

0

我加:

modelBuilder.Configurations.Add(new FormulaConfig());
public class FormulaConfig : EntityTypeConfiguration<Formula>
{
    public FormulaConfig()
    {               // one-to-many
        this.HasRequired(x => x.Article)
            .WithOptional(x=>x.Formula)         
            .WillCascadeOnDelete();

    }
}

但得到错误:

Article_Formula_Target::多重性在关系“Article_Formula”中的角色“Article_Formula_Target”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是“*”。

于 2014-07-14T10:26:00.523 回答
0

考虑使用 FluentAPI,因为它对用户更友好:

    modelBuilder.Entity<FormulaItem>()
        .HasOptional(b => b.Article )
        .WithMany(a => a.FormulaItem);

在您的情况下,您必须缺少另一个 InverseProperty 属性:

[InverseProperty("FormulaItem")]
public virtual Article Article { get; set; }
于 2014-07-14T09:56:56.403 回答