@stcmd04236

Как написать расширение метода для EF6?

Добрый день! Как можно написать расширение для методов entity framework 6 ? Или есть ли какое нибудь решение для однотипных запросов.
  • Вопрос задан
  • 254 просмотра
Решения вопроса 1
andrewpianykh
@andrewpianykh
Реализуйте для модели интерфейс IEntity, чтобы в методе расширения использовать ограничение универсального типа:

public interface IEntity
{
	int Id { get; set; }
}

public class Model : IEntity
{
	public int Id { get; set; }        
	// ...
}


public static bool ExistById<T>(this DbSet<T> source, int id) where T : IEntity
{
	return source.Count(c => c.Id == id) > 0;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
yarosroman
@yarosroman Куратор тега C#
C# the best
Так же как и для любого другого класса. metanit.com/sharp/tutorial/3.18.php
Ответ написан
@stcmd04236 Автор вопроса
Роман вот написал следующее но оказывается эти универсальные типы не работают с значимым типами. Остается только вариант деревья выражений но никак не могу понять эти деревья.

public static bool ExistById<T> (this DbSet<T> source, int Id)
		{
			string sql  = source.ToString();
			var regex = new Regex("FROM (?<table>.*) AS");
			var match  =regex.Match(sql);
			var tableName = match.Groups["table"].Value;

			string query = string.Format("SELECT [dbo].[{0}].[Id] FROM [dbo].[{0}] WHERE [dbo].[{0}].[Id] == {1}", tableName, Id.ToString());

			var result = source.SqlQuery(query).FirstOrDefault();
			return result != null ? true : false;
		}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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