EF5 CodeFirst +非键列之间的关系

时间:2013-02-05 18:39:59

标签: entity-framework ef-code-first

有两个班级;

public class Item
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }

    public virtual BinCard BinCard { get; set; }
}

public class BinCard
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public int ItemId { get; set; }
    [Required]
    public DateTime Date { get; set; }
    [Required]
    public double Qty { get; set; }

    public ObservableCollection<Item> Item { get; set; }
}

BinCard.Id PK 自动增量

我希望使用 Item.Id BinCard.ItemId 使用* FluentAPI *来表达两个表之间的关系。

请帮我正确创建这种关系。

2 个答案:

答案 0 :(得分:1)

EF不支持非PK主要ID,因为它不支持PK以外的唯一键。要完成这项工作,您必须根据BinCard.IdBinCardIdItem实体 - 顺便说一下创建关系。它看起来像是在模型中建立关系的正确方法。你当前的模特看起来很奇怪。

答案 1 :(得分:1)

感谢所有回复。这是我的问题的解决方案。

public class BinCard
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public int ItemId { get; set; }
    [Required]
    public DateTime Date { get; set; }
    [Required]
    public double Qty { get; set; }

    public virtual Drug Drug { get; set; }
}

public class Item
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }

    public ObservableCollection<BinCard> BinCard { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Drug>()
            .HasRequired(s => s.Stock)
            .WithRequiredPrincipal(s => s.Drug);
}