У меня есть два класса:
- Книга
- MultilingualString (имеет много переводов, но это не важно для этого примера)
Моя цель это автоматическое создание ссылки из книги на MultilingualString (Book.Description
).
Это довольно сложное приложение, поэтому я сократил его до необходимого кода. В следующем примере показано, как мое приложение взаимодействует с EF:
static void Main(string[] args)
{
using(var model = new ModelCFContext())
{
// Done by a generic ViewModel
var book = model.Set<Book>().Create();
// Currently I am instantiating book.Description inside the ViewModel (of Book in this case).
// Is there a better way?
book.Description = model.MultilingualStrings.Create();
// Set by TextBox-Binding
book.Description.TextDefault = "TestDefault3";
// Done by a generic ViewModel
Insert(model, book);
}
using (var model = new ModelCFContext())
{
OutputFirstBook(model);
}
Console.ReadKey();
}
private static void OutputFirstBook(ModelCFContext model)
{
var spez = model.Books.FirstOrDefault();
Console.WriteLine(spez.Description.TextDefault);
}
private static void Insert<T>(ModelCFContext model, T book) where T : class
{
model.Set<T>().Add(book);
model.SaveChanges();
}
Обычно я создаю такую ссылку в конструкторе Book
. Но это не сработает, потому что EntityFramework не будет вводить прокси (при загрузке данных из базы данных).
Book-Class:
[Table("Book")]
public partial class Book
{
public Book()
{
//Description = new MultilingualString();
}
[Key]
public int BookId { get; set; }
[Required]
public virtual MultilingualString Description { get; set; }
}
MultilingualString-Class:
[Table("MultilingualString")]
public partial class MultilingualString
{
public MultilingualString()
{
Translations = new ObservableCollection<Translation>();
}
[Key]
public int MultilingualStringId { get; set; }
public string TextDefault { get; set; }
public virtual ObservableCollection<Translation> Translations { get; set; }
}
Я сейчас создаю экземпляр книги. Описание в ViewModel of Book. Есть ли лучший способ сделать это?