у меня есть несколько идентичных групп объектов, каждый из которых состоит из лиц, преобразованных в основную таблицу и пару ссылок таблиц, напримерEntity Framework - Общий метод для обработки идентичных объектов
//group1
class OrderNote
{
public int OrderNoteId {get; set;}
public virtual ICollecton<OrderNoteTag> OrderNoteTags {get; set;}
}
class OrderNoteTag
{
public int OrderNoteId {get; set;}
public int TagId {get; set;}
}
//////
//group 2
class ClientNote
{
public int ClientNoteId {get; set;}
public virtual ICollecton<ClientNoteTag> ClientNoteTags {get; set;}
}
class ClientNoteTag
{
public int ClientNoteId {get; set;}
public int TagId {get; set;}
}
/////
Теперь мне нужен метод, который позволяет мне обрабатывать основные объекты по одной и той же процедуре, поэтому мне не придется дублировать один и тот же код много раз. Моя идея состоит в том, чтобы иметь некоторые базовые классы для заметок и тегов, конкретные типы наследуют их, и метод примет базовый тип для примечания. Но я не могу понять, как объявлять и наследовать свойства навигации, поэтому они отображаются на конкретный тип тега, но могут обрабатываться как базовый.
Вот что-то подобное должно быть:
public class TagBase
{
public int NoteId {get; set;}
public int TagId {get; set;}
}
public class NoteBase
{
public int NoteId {get; set;}
public virtual ICollecton<TagBase> NoteTags {get; set;}
}
//then we inherit
public class OrderNoteTag : TagBase {}
public class OrderNote : NoteBase
{
//Here we should pass the concrete type OrderNoteTag to NoteTags collection somehow
}
// Then we have method, where we should be able to pass OrderNote or ClientNote
public void ProcessNote(NoteBase note)
{
foreach(var tag in note.NoteTags){...blah-blah-blah...}
}
Спасибо заранее.
Вы попробуйте изменить подпись для ProcessNote на 'общественного недействительными ProcessNote (TNote примечание), где TNote: NoteBase'? –
@raderick, мне нужен общий алгоритм для сохранения заметок, не зависящих от их типа. Они должны прийти на сервер в форме базового класса. И, опять же, главная проблема - наследовать свойства навигации с правильным типом, и это не решает проблему. – KorsaR
Я не совсем уверен, что вы пытаетесь сделать здесь, вероятно, вы также должны взглянуть на шаблон посетителя. –