【发布时间】:2017-05-10 08:06:10
【问题描述】:
我在现有数据库中有 3 个相关表。 Many-to-Many (Many Person Many Group) 和一个表之间 - 事件,女巫 rate 这两个表。
public class Person
{
public int PersonID { get; set; }
public string No { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Event> Events { get; set; }
}
public class Event
{
public int EventID { get; set; }
public string EventData { get; set; }
public int PersonID { get; set; }
public int GroupID { get; set; }
public virtual Person Person { get; set; }
public virtual Group Group { get; set; }
}
public class Group
{
public int GroupID { get; set; }
public string GroupName { get; set; }
public virtual ICollection<Event> PersonGroup { get; set; }
}
我使用 Fluent API 描述了关系。 首先我声明了PK的
modelBuilder.Entity<Person>()
.HasKey(k => k.PersonID });
modelBuilder.Entity<Event>()
.HasKey(k => k.EventID);
modelBuilder.Entity<Group>()
.HasKey(k => k.GroupID });
现在外键: 人有很多事件
modelBuilder.Entity<Person>()
.HasKey(k => k.PersonID })
.HasMany(k => k.Events)
.WithRequired()
.HasForeignKey(f => f.PersonID);
在 Event 类中,我有 Person(及其所有参数)
modelBuilder.Entity<Event>()
.HasRequired(s => s.Person)
.WithMany()
.HasForeignKey(fk => fk.PersonID);
我还需要一个包含所有数据的组:
modelBuilder.Entity<Event>()
.HasOptional(s => s.Group)
.WithMany()
.HasForeignKey(fk => fk.GroupID });
至少我需要一个参与事件的人员组
modelBuilder.Entity<Group>()
.HasKey(k =>k.GroupID })
.HasMany(k => k.PersonGroup)
.WithOptional()
.HasForeignKey(fk => fk.GroupID);
看来我有我需要的一切,但我需要一个 mo 集合(一组有他们名字的人)
我通过 PersonGroup 关系获得的内容我拥有所有事件,但还需要获取 Persons。你能帮忙吗?
【问题讨论】:
-
您很可能必须修改模型,而不是询问如何从当前模型中获取信息。我在完善我的答案时意识到了这一点,并在其中加入了一些想法。
-
我无法更改模型...只需要获取信息...
-
所以我正在寻找如何在不选择的情况下获取相关数据:) 而这些关系我试图把自己放在
-
你说的“相关数据没有选择”是什么意思?如果没有任何选择,您的数据模型将不支持
Group.People集合。在大多数情况下,要求没有技术 XY 的结果是一件相当奇怪的事情。 -
查看我对客户端便利属性的编辑
标签: c# entity-framework relationship ef-fluent-api