Sax*_*man 2 entity-relationship many-to-many entity-framework poco entity-framework-4
我真的需要有人帮助我完全理解如何与Entity Framework 4 CTP 5,POCO建立多对多的关系.我需要了解3个概念:
这是我目前的型号:
public class MusicSheet
{
[Key]
public int ID { get; set; }
public string Title { get; set; }
public string Key { get; set; }
public virtual ICollection<Author> Authors { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Author
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public string Bio { get; set; }
public virtual ICollection<MusicSheet> MusicSheets { get; set; }
}
public class Tag
{
[Key]
public int ID { get; set; }
public string TagName { get; set; }
public virtual ICollection<MusicSheet> MusicSheets { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,MusicSheet可以有多个Authors或者Tags,Author或者Tag可以有多个MusicSheets.
我的问题再次出现:
EntityTypeConfiguration设置它们之间的关系以及映射到与多对多关系相关联的表/对象.非常感谢你.我真的希望完全理解它而不仅仅是在没有完全理解正在发生的事情的情况下这样做.尤其是#3.
在EF4 CTP5中,当您将公共虚拟ICollection放在多对多关系的每个类中时,默认约定完成关系,正如您已经完成的那样,您的上下文类应如下所示:
public class YourContextName : DbContext
{
public DbSet<MusicSheet> MusicSheets { get; set; }
public DbSet<Tag> Tags { get; set; }
public DbSet<Author> Authors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)很简单,您只需创建一个MusicSheet类的实例,然后将作者和标签的所有实例添加到MusicSheet中的每个作者和标签集合中,然后将您的MusicSheet实例添加到MusicSheets的上下文集合中,然后致电SaveChanges:
MusicSheet musicSheet = new MusicSheet
{
Title = "Music Sheet 1",
Key = "Key",
Authors = new List<Author>
{
new Author
{
Name = "Author 1",
Bio = "Author 1 biographic text..."
},
new Author
{
Name = "Author 2",
Bio = "Author 2 biographic text..."
}
},
Tags = new List<Tag>
{
new Tag {TagName = "TagA"},
new Tag {TagName = "TagC"}
}
};
var context = new YourContextName();
context.MusicSheets.Add(musicSheet);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)要更新你必须加载你的MusicSheet并删除你不想要的标签,然后添加你需要添加的标签,这是如何:
var context = new YourContextName();
var myMusicSheet = context.MusicSheets.First();
//The Tag you wnat to remove.
var tagToRemove = myMusicSheet.Tags.First();
var tagToAdd = new Tag {TagName = "TagX"};
myMusicSheet.Tags.Remove(tagToRemove);
myMusicSheet.Tags.Add(tagToAdd);
context.Entry(myMusicSheet).State = EntityState.Modified;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)您还可以找到您知道存在并添加到MusicSheet的任何作者和/或标签,反之亦然,但这是基础.
请记住这是EF4 CTP5代码首先......
对不起,我的英语不是我的主要语言,我希望这可以帮助你,多米尼加共和国的问候.
PS:不要忘记添加对EntityFramework和System.Data.Entity的引用,你有责任做其他事情,比如单元测试,验证,异常处理等等
编辑:
首先,您需要为模型添加构造函数:
public class Tag
{
[Key]
public int ID { get; set; }
public string TagName { get; set; }
public Tag()
{
MusicSheets = new List<MusicSheet>();
}
public virtual ICollection<MusicSheet> MusicSheets { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
......然后你可以这样做:
var context = new YourContextName();
var newMusicSheet = new MusicSheet();
newMusicSheet.Title = "Newly added Music Sheet";
//Your existing Tag.
var existingTag = contex.Tags.Find(3);
existingTag.MusicSheets.Add(existingTag);
context.Entry(existingTag).State = EntityState.Modified;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
您可以为所有型号执行相同的操作.
我希望这可以帮到你!
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |