c# - Linq多对多连接表



我刚刚开始使用Linq,目前我已经准备好了一个数据库,并在c#中制作了一些实体类。

现在我的对象"Person"one_answers"Profession "有一个多对多的关系。但是每当我尝试调用下一个语句时,它都不会工作:

Context ctx = new Context(ConfigurationManager.ConnectionStrings["myContext"].ConnectionString);
var Julian = (from j in ctx.persons
                         where j.Name == "Julian"
                         select j).Single();
Profession proftest = new Profession() { Name = "Programmer", Accepted = true };
Julian.Professesions.Add(proftest);
ctx.SubmitChanges();

现在我将向您展示我正在使用的类:

Person得到了接下来的几个东西(类变量的其余部分有效,所以我将向您展示不好的部分):

// Data (for mapping)
private EntitySet<PersonProfession> personProfession;
public Person()
        {
            personProfession = new EntitySet<PersonProfession>();
        }

        [Association(Name = "FK_j_Person_Profession_Person", Storage = "personProfession", OtherKey = "personId", ThisKey = "Id")]
        internal ICollection<PersonProfession> PersonProfessions
        {
            get { return personProfession; }
            set { personProfession.Assign(value); }
        }
public ICollection<Profession> Professions
        {
            get { return (from prof in PersonProfessions where prof.Profession.Accepted==true select prof.Profession).ToList(); }
        }

现在我能够成功地调用"Person"类中的以下方法:

public void AddProfession(Profession profession, Person person)
        {
            PersonProfession pp = new PersonProfession();
            pp.Person = person;
            pp.Profession = profession;
            personProfession.Add(pp);
        }

但这当然不是我想要的。

数据关系如下:

Person -> j_Person_Profession <——Profession

我也遇到了同样的问题(. add()不起作用)与Person和Alias之间的另一个关系(这是一个表,只有一个PersonId的int和一个别名的字符串)。


最后一个小问题如下:我的"Profession"类也有与"Person"相同的链接,所以每当我询问一个人的上下文时,我可以查看他/她的职业,并且在职业中有更多具有相同职业的人。对于大型数据库来说,这不是很慢吗?也许我应该去掉反向链接?

从Yakimych的评论中,我得到了我的答案:

你正在使用的是Linq-to-SQL,不是吗?毫无疑问,L2S将连接表映射为实体,因此您必须像在工作示例中那样使用PersonProfession对象。在实体框架与L2S相反的情况下,纯连接表(只包含两个外键)不会映射到单独的实体,您可以直接访问Person.ProfessionsProfessions.People

相关内容

  • 没有找到相关文章

最新更新