首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF多对多当类已被引用为FK不工作时

EF多对多当类已被引用为FK不工作时
EN

Stack Overflow用户
提问于 2016-08-04 05:11:09
回答 2查看 21关注 0票数 0

我正在尝试创建PeoplePenguins之间的实体框架many-to-many关系,其形式是通常的包含Person_IdPenguin_IdPenguinPeople表。当我使用下面的代码生成迁移时,没有创建many-to-many。但是,如果我注释掉企鹅类中的3行"OwnerId“行,many-to-many就可以工作了。怎么回事?他们应该是独立的。

代码语言:javascript
复制
public class Penguin
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }

    public long OwnerId{ get; set; } //works if I comment this out
    [ForeignKey("OwnerId")] //works if I comment this out
    public Person Person{ get; set; } //works if I comment this out

    public virtual ICollection<Person> PenguinTrainers{ get; set; }
}

public class Person 
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }

    public virtual ICollection<Person> People{ get; set; }
}
EN

回答 2

Stack Overflow用户

发布于 2016-08-04 05:32:54

如果你有一个

代码语言:javascript
复制
ICollection<Penguin> AssignedPenguins { get; set; }

在Person类上,并且只在两个类上都有Id属性,那么它应该创建关联表。

票数 0
EN

Stack Overflow用户

发布于 2016-08-05 02:35:39

我不知道是否有更简单的方法来做这件事,但我被迫使用EF docs中概述的FluentAPI。示例来自文档,因为很明显,我的企鹅/人模型只是实际导致问题的模型的虚构替代品:

代码语言:javascript
复制
modelBuilder.Entity<Post>() 
                .HasMany(p => p.Tags) 
                .WithMany(t => t.Posts) 
                .Map(mc => 
                   { 
                       mc.ToTable("PostTags"); 
                       mc.MapLeftKey("Post_Id"); 
                       mc.MapRightKey("Tag_Id"); 
                   });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38753703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档