В настоящее время я углубляюсь в LINQ to SQL, поскольку он выглядит круто и потенциально во многих случаях гораздо полезнее, чем ADO.NET.
Раньше я использовал LINQ to SQL, но я создал все классы домена с помощью конструктора классов LINQ to SQL, и я не очень хочу его использовать, так как предпочел бы знать, что происходит «за кулисами». вместо того, чтобы положить это. Магия .NET. Поэтому я пытался создать классы своего домена (или сущности) вручную, используя атрибуты LINQ.
Я находил все в порядке, пока не столкнулся с проблемами, пытаясь смоделировать отношения один-ко-многим в моей БД. Существует таблица Meets со столбцом LeaderId , который является внешним ключом таблицы Участники
Вот как у меня настроены классы сущностей:
Meet.cs
[Table(Name = "dbo.Meets")]
public class Meet
{
private EntityRef<Member> _leader;
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int MeetId { get; set; }
[Column]
public string Location { get; set; }
[Column]
public DateTime Date { get; set; }
[Association(Name = "FK_Meets_Members", Storage = "_leader")]
public Member Leader
{
get { return _leader.Entity; }
set { _leader.Entity = value; }
}
}
Member.cs
[Table(Name = "dbo.Members")]
public class Member
{
private EntitySet<Meet> _meets;
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int MemberId { get; set; }
[Column]
public string Name { get; set; }
[Column]
public string Hometown { get; set; }
[Column]
public string Info { get; set; }
[Column]
public ComitteeRole ComitteeRole { get; set; }
[Association(Name = "FK_Meets_Members", Storage = "_meets")]
public ICollection<Meet> Meets
{
get { return _meets; }
set { _meets.Assign(value); }
}
}
Выбирает работу в таблице Meets, а также в таблице Members, и связанные объекты загружаются нормально. Однако, когда я пытаюсь сделать вставку в таблицу Meets, я получаю старый добрый 'Ссылка на объект не установлена на экземпляр объекта' error.
Теперь проблема должна заключаться в том, что я использую для хранения LeaderId при добавлении новой сущности Meet. Я устанавливаю внешний ключ в моем объекте так:
Meet meet = new Meet();
meet.Leader.MemberId = 1;
Однако, когда я выполняю вставку LINQ, кажется, что он не понимает, что MemberId свойства Leader - это значение, которое нужно вставить в столбец внешнего ключа в таблице Meets .
Я понимаю, что это, вероятно, можно решить, добавив отдельное свойство в класс Meet следующим образом:
[Column]
public int LeaderId { get; set; }
Однако я не хочу загромождать свой класс дополнительным свойством, которое является дубликатом свойства MemberId свойства Leader.
Надеюсь, ты меня понимаешь ...
Кто-нибудь может помочь?