Entity framework 不带导航属性的一对多关系 公共类MyEntity { 公共int MyEntityID{get;set;} 公共int Foo{get;set;} 公共ICollection MyEntityDetails{get;set;} } 公共类MyEntityDetail { [键,列(顺序=0)] public int PK{get;set;}//这将是MyEntity中的MyEntityID [键,列(顺序=1)] public int OtherPK{get;set;}//这将手动设置 公共字符串条{get;set;} } 公共类MyEntityContext:DbContext { 公共DbSet myenties{get;set;} 公共数据库集MyEntityDetails{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } }

Entity framework 不带导航属性的一对多关系 公共类MyEntity { 公共int MyEntityID{get;set;} 公共int Foo{get;set;} 公共ICollection MyEntityDetails{get;set;} } 公共类MyEntityDetail { [键,列(顺序=0)] public int PK{get;set;}//这将是MyEntity中的MyEntityID [键,列(顺序=1)] public int OtherPK{get;set;}//这将手动设置 公共字符串条{get;set;} } 公共类MyEntityContext:DbContext { 公共DbSet myenties{get;set;} 公共数据库集MyEntityDetails{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } },entity-framework,entity-framework-4,entity-framework-4.1,ef-code-first,code-first,Entity Framework,Entity Framework 4,Entity Framework 4.1,Ef Code First,Code First,我认为上面的代码解释了我试图用entity framework code first 4.2实现的目标 请注意,MyEntityDetail不包含MyEntity的导航属性。如何将MyEntityID与MyEntityDetail中的PK相关联??如果有必要,我可以将MyEntityNavigation属性添加到MyEntityDetail类中,但我不想为我从未访问过的属性使用额外内存。这种类型的实体将在我的项目中使用100多次。谢谢不幸的是你不能这么做。在一对一关系的情况下,PK可以是FK,但

我认为上面的代码解释了我试图用entity framework code first 4.2实现的目标
请注意,MyEntityDetail不包含MyEntity的导航属性。如何将MyEntityID与MyEntityDetail中的PK相关联??如果有必要,我可以将MyEntityNavigation属性添加到MyEntityDetail类中,但我不想为我从未访问过的属性使用额外内存。这种类型的实体将在我的项目中使用100多次。谢谢

不幸的是你不能这么做。在一对一关系的情况下,PK可以是FK,但在一对多关系中,这是不可能的,因为子表(MyEntityDetail表)的PK是唯一值,不能重复

i已将MyEntity属性添加到MyEntityDetail类,并将此代码添加到OnModelCreating modelBuilder.Entity()中。HasRequired(d=>d.MyEntity).WithMany(d=>d.MyEntityDetails).HasForeignKey(d=>d.PK);现在它保存了相关的详细记录,但在读取时,MyEntityDetails总是空的。顺便说一句,有复合键,所以PK不需要是唯一的,所以只要其他PK起作用,重复条目就不会有问题
public class MyEntity
{
    public int MyEntityID { get; set; }
    public int Foo { get; set; }


    public ICollection<MyEntityDetail> MyEntityDetails { get; set; }
}

public class MyEntityDetail
{
    [Key, Column(Order=0)]
    public int PK { get; set; } // this will be the MyEntityID from MyEntity
    [Key, Column(Order = 1)]
    public int OtherPK { get; set; } // this will be manually set
    public string Bar { get; set; }
}

public class MyEntityContext : DbContext
{
    public DbSet<MyEntity> MyEntities { get; set; }
    public DbSet<MyEntityDetail> MyEntityDetails { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}