Определите первичный ключ с помощью LINQ для SQL

Странный, что Вы "не можете" позволить 4 символа TLDs. Вы запрещаете людей от .info и .name и остановка ограничения длины .travel и .museum, но да, они менее распространены, чем 2 символа TLDs и 3 символа TLDs.

необходимо позволить алфавиты верхнего регистра также. Почтовые системы нормализуют локальную часть и доменную часть.

Для Вашего regex доменной части, доменное имя не может запускаться с '-', и не могут концы с '-'. Тире может только оставаться промежуточным.

, Если Вы пользовались библиотекой PEAR, проверьте их почтовую функцию (забыл точное имя/библиотеку). Можно проверить адрес электронной почты путем вызывания одной функции, и это проверяет адрес электронной почты согласно определению в RFC822.

5
задан Keith Adler 8 August 2009 в 18:09
поделиться

3 ответа

Деннис Троллер ответил это на вопрос, на который Бен указал в комментариях к вопросу.

3
ответ дан 18 December 2019 в 10:47
поделиться

Что-то вроде ниже (которое поддерживает другие типы, кроме int , но по умолчанию имеет значение int ). Важно отметить, что не попадайтесь в ловушку, глядя на данные атрибута через отражение; LINQ-to-SQL также поддерживает объекты без атрибутов:

public static TEntity Get<TEntity>(this DataContext dataContext, int id)
        where TEntity : class
{
    return Get<TEntity, int>(dataContext, id);
}
public static TEntity Get<TEntity, TKey>(this DataContext dataContext, TKey id)
    where TEntity : class
{
    // get the row from the database using the meta-model
    MetaType meta = dataContext.Mapping.GetTable(typeof(TEntity)).RowType;
    if (meta.IdentityMembers.Count != 1) throw new InvalidOperationException(
        "Composite identity not supported");
    string idName = meta.IdentityMembers[0].Member.Name;

    var param = Expression.Parameter(typeof(TEntity), "row");
    var lambda = Expression.Lambda<Func<TEntity, bool>>(
        Expression.Equal(
            Expression.PropertyOrField(param, idName),
            Expression.Constant(id, typeof(TKey))), param);

    return dataContext.GetTable<TEntity>().Single(lambda);
}
10
ответ дан 18 December 2019 в 10:47
поделиться

Лично я думаю, что было бы проще предоставить метод SingleOrDefault , который принимает аргумент селектора Func . Затем вы можете предоставить любой селектор по своему желанию, включая тот, который выбирает на основе идентификатора этой таблицы.

 public abstract class Repository<T> where T : class
 {
     public abstract T GetById( int id );
     public T SingleOrDefault( Func<int,T> selector )
     {
           return _dataContext.GetTable<T>().SingleOrDefault( selector );
     }
 }

Использование:

 var myObj = repos.SingleOrDefault<MyClass>( c => c.MyClassID == id );

Репозиторий со строгой типизацией может затем использовать этот метод для реализации GetById ()

 public class MyClassRepository : Repository<MyClass>
 {
     public override MyClass GetById( int id )
     {
         return this.SingleOrDefault( c => c.MyClassID == id );
     }
 }
3
ответ дан 18 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: