В 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; }
}
Очень просто, вы просто создаете экземпляр класса 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();
Для обновления вам нужно загрузить свой 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();
Вы также можете найти любого известного вам автора и / или тега, который существует и добавлен в ваш MusicSheet, и наоборот, но это основа.
Помните, что это в первую очередь относится к коду EF4 CTP5 ...
Извините, мой английский не является моим основным языком, я надеюсь, что это поможет вам, с наилучшими пожеланиями из Доминиканской Республики.
PS: не забудьте добавить ссылки на EntityFramework и System.Data.Entity. Вы несете ответственность за выполнение чего-либо еще, например модульного тестирования, проверки, обработки исключений и т. Д.
EDIT:
Сначала вам нужно добавить конструктор к вашим моделям:
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; }
}
... Тогда вы можете сделать что-то вроде этого:
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();
Вы можете сделать то же самое для всех ваших моделей.
Надеюсь, это поможет вам!