Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Generic Repository без Entity

Не могу понять как реализовать Generic Repository без Entity Framework
Ответ: Laink, естественно, разные запросы - разная реализация логики обращения к базе. Вам надо:
а) Сотворить собственный построитель запросов (как в Entity Framework).
или
б) Написать такие запросы вручную, поскладывать их в какую-то внутреннюю ассоциативную коллекцию типа Dictionary<Type, string> и единообразным образом использовать при работе с базой.

Первое я бы не стал делать ни при каких условиях. Второе можно сделать с применением Dapper.NET или аналогичной штуки.

В чём смысл сотворения такого паттерна голыми руками?
Вопрос: EntityFramework не находит ConnectionString в Аpp.congig

Делаю первые шаги в EntityFramework.
MVS 2013 Ultimate Edition SP 4
EntityFramework 6.1.3
Все, как по учебнику. Создаю шаблон из базы.
Делаю new Connection. Указываю имя SQL сервера и имя базы. Тест проходит.
Создается схема.
далее пишу две строки:

var context = new BackgroundSeContext();
var domains = context.Domain.ToList();

и на второй строке падаю с ошибкой:
No connection string named 'BackgroundSeContext' could be found in the application config file.
+
в System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel()
в System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
в System.Data.Entity.Internal.InternalContext.Initialize()
в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
в System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
в System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()
в System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()

Смотрю в App.Config - всё на месте:
+
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="BackgroundSeContext" connectionString="metadata=res://*/BackgroungSeModel.csdl|res://*/BackgroungSeModel.ssdl|res://*/BackgroungSeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ZALMAN;initial catalog=BALT_OBD_BackgroundSE;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"
      providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
Что можно попробывать сделать, чтобы заработало?
Ответ: Смысл простой.

dll будет записывать данные в базу. Подключать к своему проекту ее будут совсем другие люди, которые и знать не хотят о существовании EF и о всяких cоnnectionString'ах. Это внутренняя кухня самой dll. Внутри dll есть механизм, который позволяет знать, где она запущена и какой должен быть connectionString.
Вопрос: Spring. Repository. @Query. Привильно написать запрос

Подчеркивает в @Query Click. В чем может быть ошибка?
Как создавать сложные запросы ?

ClickRepository

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import com.qoobico.remindme.server.entity.Click;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
 
 
public interface ClickRepository extends JpaRepository<Click, Long>, JpaSpecificationExecutor<Click> {
 
 
   /**@Query("select Businesscentr.email from Businesscentr as b, Click as c, Businessbanner as bb, Bannners as ba where 
c.fullname_client = : fullnameClient AND ba.id_banner = : id AND ba.id_banner = bb.id_banner AND bb.id_bc = b.id_bc ") */
 
    @Query("SELECT c.fullname_client FROM Click c WHERE c.id_bannners = :idbanners AND c.fullname_client = :fullnameClient")
    String sent(@Param("fullname_client") String fullnameClient, @Param("id_banner") long idbanners);
 
}



org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clickController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.qoobico.remindme.server.service.ClickService com.qoobico.remindme.server.controller.ClickController.service; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clickServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.qoobico.remindme.server.repository.ClickRepository com.qoobico.remindme.server.service.ClickServiceImpl.clickRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clickRepository': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Using named parameters for method public abstract java.lang.String com.qoobico.remindme.server.repository.ClickRepository.sent(java.lang.String,long) but parameter 'fullname_client' not found in annotated query 'SELECT c.fullname_client FROM Click c WHERE c.id_bannners = :idbanners AND c.fullname_client = :fullnameClient'!
Ответ:
Сообщение от Skelotron
Java
1
2
@Query("SELECT c.fullnameClient FROM Click c join c.idBanners b WHERE b.idBanner = :id_banner AND c.fullnameClient = :fullname_client")
    String sent(@Param("fullname_client") String fullnameClient, @Param("id_banner") long idbanners);
Почему в SELECT c.fullnameClient ? Click колонка имеет название fullname_client в таблице бд

Добавлено через 15 минут
@Query запрос строится на именованиях таблиц, колонок, ... которые указаны в entity.java, а не в именованиях самой бд?

Добавлено через 16 минут
Java
1
2
3
4
5
6
7
8
@Entity
@Table(name = "banners")
public class Banners {
    @Id
    @Column(name = "id_banner", unique = true, nullable = false)
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private long idBanner;

Тогда join так изменить ?
Java
1
2
    @Query("SELECT c.fullname_client FROM Click AS c join c.idBanner Banners b WHERE b.id_banner = :id_banner AND c.fullname_client = :fullname_client")
    String sent(@Param("fullname_client") String fullnameClient, @Param("id_banner") long idbanners);
Добавлено через 6 минут
Тогда join так изменить ?
Java
1
2
@Query("SELECT c.fullname_client FROM Click AS c join c.idBanner Banners b WHERE b.id_banner = :id_banner AND c.fullname_client = :fullname_client")
String sent(@Param("fullname_client") String fullnameClient, @Param("id_banner") long idbanners);
Источник не могу найти, где описано подробно как делать сложные запросы. Подскажите если есть какой то материал. У меня четыре таблицы связаны, получается из двух входных данных по таблице Click надо достать одну колонку из 4ой таблице, и весь процесс поиска колонки проходит по четырем таблицам

Добавлено через 1 час 18 минут
Сообщение от LeX
это если в Banners у тебя поле id
Controller
Java
1
2
3
4
5
6
7
8
9
10
11
12
     @Autowired
    private ClickService service;
 
    /*
        i.e. information about fullname_client, id_banner sent to server from client
    */
    @RequestMapping(value = "/sentemail", method = RequestMethod.POST)
    @ResponseBody
    public String sentClick(@RequestParam ("fullnameClient") String fullnameClient,@RequestParam ("idbanners") long idbanners) {
 
        return service.sent(fullnameClient, idbanners);
    }
Repository
Java
1
2
 @Query("SELECT c.fullnameClient FROM Click AS c join c.idbanners Banners b WHERE b.idBanner = :idbanners AND c.fullnameClient = :fullnameClient")
    String sent(@Param("fullnameClient") String fullnameClient, @Param("idbanners") long idbanners);
Entity Click

Java
1
2
3
4
5
6
7
8
9
10
11
12
        @Id
    @Column(name = "id_click", unique = true, nullable = false)
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private long idClick;
 
    @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
    @JoinColumn(name = "id_banners", nullable = false)
    private Banners idbanners;
 
    @Column(name = "fullname_client", nullable = false, length = 50)
    private String fullnameClient;
Entity Banners
Java
1
2
3
4
5
6
7
8
9
10
11
      @Id
    @Column(name = "id_banner", unique = true, nullable = false)
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private long idBanner;
 
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "banners")
    private Set<Businessbanner> businessbanners;
 
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "idbanners")
    private Set<Click> clicks;
Java
1
2
3
Error
 
     org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clickController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.qoobico.remindme.server.service.ClickService com.qoobico.remindme.server.controller.ClickController.service; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clickServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.qoobico.remindme.server.repository.ClickRepository com.qoobico.remindme.server.service.ClickServiceImpl.clickRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clickRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.lang.String com.qoobico.remindme.server.repository.ClickRepository.sent(java.lang.String,long)!
Добавлено через 42 минуты
Заработало
Java
1
2
@Query("SELECT c.fullnameClient FROM Click AS c join c.idbanners b WHERE b.idBanner = :idbanners AND c.fullnameClient = :fullnameClient")
    String sent(@Param("fullnameClient") String fullnameClient, @Param("idbanners") long idbanners);
Вопрос: EntityFramework в приложении реализующем службу Windows

В одном приложение размещаю две службы Windows. При первом же обращении к EntityFramework выскакивает исключение

System.InvalidOperationException не обработано пользовательским кодом Message=Нельзя использовать контекст во время создания модели. Это исключение может возникать, когда контекст используется в методе OnModelCreating или если к одному и тому же экземпляру контекста одновременно осуществляется доступ из нескольких потоков. Следует учитывать, что для членов экземпляров DbContext и связанных классов потокобезопасность не гарантируется. Source=EntityFramework

Вопрос: Где же надо разместить экземпляры DbContext, ведь две службы это минимум 2 потока, да и для обработки запросов к службам используются несколько Task'ов на запрос?

Спасибо.
Ответ:
vol2hv
В каждом Taske, работающем с EF надо создавать свой экземпляр контента.


Рад был помочь
Вопрос: ADO.Net или EntityFramework

Есть ли в ADO.Net то, с чем не справляется EntityFramework? (желательно с примерами)
Ответ:
Сообщение от Msey
Есть ли в ADO.Net то, с чем не справляется EntityFramework?
Вопрос не совсем корректный, т.к. напрямую эти две вещи сравнивать нельзя.
EF — это ORM-надстройка над ADO.Net. С чем она справляется и с чем нет по большей части зависит от того, какие запросы может или не может генерировать конкретный провайдер под конкретную СУБД.

В целом EF довольно неплохо справляется с простыми задачами типа CRUD объектов с небольшим количеством связок, но становится абсолютно неуклюжей для каких-то более специализированных задач: работа с большим объемом данных, upsert'ы или работа со сложными объектами.
Это не значит, что "голая" ADO.Net справляется с этим лучше. Она просто более низкоуровневая и позволяет вам самому реализовать любой необходимый сценарий, работая напрямую с SQL-запросами.
Вопрос: Стоит ли использовать EntityFramework с Firebird 3.0 для большой ERP-системы?

хотелось бы знать +/- подхода EntityFramework + Firebird для большой ERP-системы. смущают возможные тормоза при маппинге, необходимость переписывать sql-запросы.
Ответ:
skyANA
Дак ты понял каким образом использование ХП исключает теневые действия, или не понял?


Не понял.
Вопрос: c# параллелизм в EntityFramework

Здравствуйте!

У меня возникла проблема в моем приложении, связанна она с одновременным доступом нескольких пользователей на редактирование одной и той же записи в таблице. Почитав мануалы, я вычитал, что в EntityFrameWork по умолчанию нет ограничений на одновременное редактирование одной записи несколькими пользователями.

Что я нашел для решения этого вопроса:
1. Аннотация [ConcurrencyCheck] на определенное поле
2. Аннотация
[Timestamp]
public byte[] RowVersion { get; set; } это на строку в целом.
+


Решение как оказывается есть, но оно не решает задачу полностью. Так как это работает только тогда, когда пользователь захочет сохранить данные. А за это время другой пользователь может открыть туже самую запись, и изменить поля, а при сохранении у вылетит ошибка о том что эту строку уже кто-то вперед его сохранил. Соответственно, все что второй пользователь вносил было напрасно.

Как реализовать так, чтобы второй пользователь изначально видел, что строка уже редактируется первым пользователем до её сохранения в базу данных первым пользователем?
Ответ:
Смузи
ViPRos
1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий.
2. Защищает.

Я ж намекнул, что все приложения должны ходить в БД через единое API. Если это не так, то грошь цена твоей песочнице.

Мусь, не начинай.
Никто не будет переписывать свои зоопарк из какого-то сраного ОРМ, который не умеет работать с пессимизме и требует - О УЖОС!!! -
какие то ДТО (что за зверь, с чем едят, какой недоумок придумал?)
Вопрос: JPA custom repository

Когда делаешь custom repository нужно делать отдельный интерфейс. Вот пример -
Обязательно ли делать интерфейс custom repository? Просто не понимаю зачем он там нужен, только дублирование методов. Можно ли без интерфейса сделать?
Ответ: Спасибо. Попробую с интерфейсами java 8 и отпишу.
Вопрос: Repository & Service

Господа, извеняюсь за нубские вопросы... но
Вот в интернетах пишут что репозитории занимаются тем что общаются с базой данных
А в Сервисах находиться бизнес логика. Далее показывают пример (можно увидеть ниже).
Это только у меня ощущение что бизнес логика в этом примере в репозитории?
Зачем вообще слой Service? Такое ощущение что вместо сервиса можно использовать сразу репозиторий в клиенте.

Прокоментируйте пожалуйста...

Repository
        public Category GetCategory(bool Blocked)
        {
            var category = this.DbContext.Categories.Where(c => c.Blocked == Blocked).FirstOrDefault();

            return category;
        }

Service
        public Category GetCategory(bool Blocked)
        {
            var category = categorysRepository.GetCategory(Blocked: false);
            return category;
        }

Client
        public ActionResult Index()
        {
            var category = categoryService.GetCategory(false);
            var modelCategoryViewModel = Mapper.Map<Category, CategoryViewModel>(category);
            return View(viewModelGadgets);
        }
Ответ:
skyANA
Алексей К
пропущено...
Есть и другие способы организовать тестирование: банально, подключить тесты к тестовой БД.

И какое покрытие у таких тестов? И сколько по времени они выполняются?


Алексей путает интеграционные тесты с модульными. Смею предположить, что из-за отсутствия опыта в тестировании.
Вопрос: maven free repository server

коллеги подскажите пожалуйста,

решили на фирме поставить свой maven-repository для хранения своих артефактов.
Посмотрел гуглю он насыпал кучу всего. Но тестировать и ковырятся со всем подряд нет возможности.

Может кто-нибудь порекомендует какой-нибудь ?
Важно чтоб свободный был.

спасибо
Ответ: Alexey Tomin,

спасибо