У меня есть простая база данных с двумя таблицами: Photo
и Tag
.Между двумя таблицами существует отношение один ко многим (фотография может иметь много тегов).Вот диаграмма:
Теперь я создал класс Photo
и настроил его для LINQ-to-SQL с использованием атрибутов.Код этого класса приведен ниже:
[Table]
public class Photo
{
[Column(IsDbGenerated = true, IsPrimaryKey = true, CanBeNull = false)]
public int ID { get; set; }
[Column(CanBeNull = false)]
public string Filename { get; set; }
[Column(CanBeNull = false)]
public string Description { get; set; }
[Column(CanBeNull = false)]
public DateTime DateTaken { get; set; }
public List<string> Tags { get; set; }
public override string ToString()
{
string result = String.Format("File: {0}, Desc: {1}, Date: {2}, Tags: ",
Filename, Description, DateTaken);
if (Tags != null)
foreach (string tag in Tags)
result += tag + ", ";
return result;
}
}
Вы заметите, что в настоящее время у меня нет атрибутов для списка Tags
.Я хотел бы иметь возможность настроить атрибуты (ассоциации) для списка Tags
, чтобы он был заполнен полем Name
таблицы Tag
для всех записей в таблице Tag
конкретного PhotoID
.Было бы предпочтительнее, если бы я мог сделать это напрямую (т.е. без необходимости настраивать класс Tag
, имитирующий / относящийся к таблице Tag
).Поскольку меня интересует только одно поле (имя в таблице тегов), а не много полей, я думаю, что есть способ сделать это.
Возможно ли это, и если да, то как мне дальшеукрасить класс атрибутами и каков будет синтаксис для простого запроса на выбор с использованием LINQ-to-SQL?
Если это поможет, вот код, который я использую, чтобы просто добавить новую фотографию и затем захватить всеиз фотографий из базы данных (очевидно, информация тега не извлекается, поскольку код теперь стоит).
DataContext context = new DataContext(connectionString);
// add new photo
Photo newPhoto = new Photo { Filename = "MyImage1.jpg", Description = "Me", DateTaken = DateTime.Now };
context.GetTable<Photo>().InsertOnSubmit(newPhoto);
context.SubmitChanges();
// print out all photos
var photoQuery = from m in context.GetTable<Photo>() select m;
foreach (Photo myPhoto in photoQuery)
textBox1.Text += Environment.NewLine + myPhoto.ToString();