Cod*_*oob 27 c# entity-framework entity-framework-4 ef-code-first
我刚刚开始使用EF,我观看了一些精彩的教程视频.我坚持以下.
我有一个文件集合的类,我希望这些与事件和/或人联系在一起
public class file{
public int id {get;set;}
public string path {get;set;}
}
public event {
public int id {get;set;}
public string eventname {get;set}
public virtual ICollection<file> files {get;set;}
public event(){ files = new list<file>();}
}
public person {
public int id {get;set;}
public string name {get;set}
public virtual ICollection<file> files {get;set;}
public person(){ files = new list<file>();}
}
Run Code Online (Sandbox Code Playgroud)
现在当我生成数据库时,我的文件表有一个PersonID AND EventID.
我希望能够让用户将文件附加到人和/或事件.
Mor*_*avi 32
在将1到多个关联映射到数据库方面,您获得的是EF Code First的默认行为.例如,你有一个ICollection<File>Person类,因此,EF将在Files表(PersonId)上创建一个FK并将其映射到Persons表上的Id PK.
现在,我的猜测是,你想有一个多对多的文件和人之间的关系,使每个文件涉及到许多人,并且每个人都可以有许多文件(Event对象同样的故事也一样).实现此目的的一种方法是将File类的导航属性指向Event和Person类.所以,你的模型应该改为:
public class File {
public int Id { get; set; }
public string Path { get; set; }
public virtual ICollection<Event> Events { get; set; }
public virtual ICollection<Person> Persons { get; set; }
}
public class Event {
public int Id { get; set; }
public string EventName { get; set; }
public virtual ICollection<File> Files {get;set;}
}
public class Person {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<File> Files { get; set; }
}
public class MyContext : DbContext {
public DbSet<Person> Persons { get; set; }
public DbSet<Event> Events { get; set; }
public DbSet<File> Files { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因此,EF将创建链接表(Events_Files和Files_Persons)以将这些多个关联映射到数据库.
更新:
当使用波苏斯与EF,如果你标记您的导航属性为虚拟,你会选择加入一些额外的EF的支持像延迟加载和关系Fixup时.因此通常在导航属性中有一个虚拟关键字被认为是一种很好的做法.
| 归档时间: |
|
| 查看次数: |
13951 次 |
| 最近记录: |