Entity framework EF5代码优先+;非键列之间的关系

Entity framework EF5代码优先+;非键列之间的关系,entity-framework,ef-code-first,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.Ide

在中国有两个班

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)]
公共int Id{get;set;}
[必需]
公共int ItemId{get;set;}
[必需]
公共日期时间日期{get;set;}
[必需]
公共双数量{get;set;}
公共ObservableCollection项{get;set;}
}
BinCard.IdPK自动增量

我想要使用Item.IdBinCard.ItemId使用*FluentAPI*来显示两个表之间的关系


请帮助我正确创建此关系。

EF不支持非PK主体ID,因为它还不支持PK以外的唯一键。要实现这一点,您必须基于
BinCard.Id
BinCard
Item
实体建立关系-顺便说一句。这看起来是在您的模型中建立关系的正确方法。你现在的模型看起来很奇怪

谢谢您的回复。这就是我问题的答案

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);
}
public-class-BinCard
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
[必需]
公共int ItemId{get;set;}
[必需]
公共日期时间日期{get;set;}
[必需]
公共双数量{get;set;}
公共虚拟药物{get;set;}
}
公共类项目
{
[关键]
公共int Id{get;set;}
[必需]
公共字符串名称{get;set;}
公共ObservableCollection BinCard{get;set;}
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(s=>s.Stock)
.具有所需的委托人(s=>s.Drug);
}
modelBuilder.Entity().HasRequired(d=>d.Item).WithMany().HasForeignKey(s=>s.ItemId);然后,在FK BinCard表中确定。但在Item表中,它引用Id(自动增量列)。不是ItemId列。
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);
}