Итак, я создал DataContext (Linq-Sql) в VS из существующей базы данных. У него есть таблица с именем «Пользователи», поэтому у меня есть объект User
. В частности, я хочу сосредоточиться на свойствах UserID
и Username
.
Теперь у меня есть интерфейс:
interface IUser
{
int Id { get; }
string Username { get; }
}
Я хочу создать частичный класс User
и реализовать IUser
. Причина этого в том, что я могу рассматривать любого пользователя как IUser во многих местах и не беспокоиться о точном классе User:
public partial class User : IUser
{
public int Id
{
get { return UserID; }
}
}
Я не реализую свойство Username
get, потому что знаю, что объект сущности уже реализует его.
Когда у меня есть такой запрос, как dc.Users.SingleOrDefault(p => p.Id == 5);
, я знаю, что это ошибка, потому что он преобразует этот вызов в оператор SQL и попытается найти столбец Id
, которого не существует — UserID существует. Так что я понимаю эту проблему отображения.
Когда я запрашиваю dc.Users.SingleOrDefault(p => p.Username == "admin")
, он также выдает ошибку, НО Username
действительно существующий столбец в базе данных, поэтому у меня сложилось впечатление, что никакого пользовательского/дополнительного сопоставления не требуется. Что мне не хватает?
Может ли кто-нибудь указать мне на хороший источник о том, как бороться с Linq и частичными классами, реализующими пользовательский интерфейс?
Вопрос об обновлении: прежде чем я попробую, кто-нибудь знает, будет ли "оснащение" файла datacontext.designer.cs нашими пользовательскими интерфейсами (для реализации в самих классах, а не в отдельном файле частичного класса) Работа? Есть ли последствие этого?
dc.Users.SingleOrDefault(p => p.Username == "admin")
Это должно работать, предполагая, что имя пользователя является свойством с нормальным отображением. - person usr   schedule 05.01.2013p
в этой лямбде? Каков статический типdc.Users
? - person usr   schedule 05.01.2013IUser.Username
. Почему оно так думает? Похоже, это ошибка: gonale.com/2009/07/22/ (Но вы понимаете, что не можете ожидать, что LINQ будет понимать элементы интерфейса, верно? Они не отображаются.) - person usr   schedule 05.01.2013