Wyklucza pełną nazw z analizy kodu FxCop?




Czy to możliwe, aby wykluczyć pełną nazw z wszystkich analiz FxCop jednocześnie analizując resztę zespołu przy użyciu `SuppressMessageAttribute`?


W moim obecnym przypadku, mam kilka klas generowanych przez LINQ to SQL, które powodują wiele problemów FxCop, i oczywiście, że nie będą modyfikować tych wszystkich, aby dopasować normy FxCop, jak wiele z tych zmian zniknie gdybym re-generowane klas.


Wiem, że FxCop ma opcji projektu do tłumienia analizę kodu generowanego, ale nie wydaje się, aby rozpoznać klas encji i kontekst utworzonych przez LINQ 2 SQL jako kod wygenerowany.
Jeśli oznaczyć klasy z `[GeneratedCode]`atrybutem, można użyć flagi / ignoregeneratedcode z FxCop jak opisano w tym MSDN postu:


[FAQ: W jaki sposób mogę zapobiec FxCop od ostrzeżeń przed wypalania kodu wygenerowanego](http://blogs.msdn.com/b/codeanalysis/archive/2008/02/28/faq-how-do-i-prevent-fxcop-1-36-from-firing-warnings-against-generated-code.aspx)


Być może trzeba będzie dodać nowy plik kodu i wdrożenia nowych klas częściowych tam, aby dodać atrybut do klas:



```
[GeneratedCode]
public partial class MainDataContext { }

```

Tylko pamiętaj, aby dodać wszystko do właściwego nazw podczas tworzenia nowego pliku.
<p>w większości baz danych a <code>not null</code> kolumna będzie bardziej wydajna pod względem przechowywanych danych z podanego powodu, a także bardziej wydajna w wyszukiwaniu i indeksowaniu - więc jeśli nie chcesz zezwalać na wartości null w kolumnie, powinieneś je wyraźnie zabronić.</p><p>będzie to miało niewielki wpływ na wydajność, ponieważ dodatkowe <code>not null</code> ograniczenia będą potencjalnie musiały być sprawdzane dla każdego wiersza, którego dotyczy zmiana za pomocą insert lub update, ale ponieważ większość baz danych jest względnie łatwa do zapisu i bardzo obciążona odczytem, ​​prawdopodobnie nie stanowi to problemu (mało czasu poświęconego na to jest zauważalne przy w każdym razie, ponieważ jest to operacja związana z procesorem, w której reszta operacji wstawiania/aktualizacji będzie związana z operacjami we/wy, a więc o wiele bardziej znaczącym „wąskim gardłem” i daje pewne „bezpłatne” sprawdzanie danych, więc kod (lub inny) kod osoby) nie może przypadkowo umieścić wartości null tam, gdzie inny kod ich nie oczekuje, a zatem może dawać nieprawidłowe wyniki w ich obecności.</p><p>edycja: jak peter wskazuje w swoim komentarzu, powyższe jest generalizmem i może nie być prawdziwe dla <em>wszystkich</em> dmbs, chociaż jestem prawie pewien, że tak jest w przypadku mysql i mssql. inne komplikacje w tym obszarze mogą obejmować takie funkcje, jak rzadkie tabele (na przykład zaimplementowane mssql 2008), które zmienią dynamikę wydajności (nie) zerowalnych kolumn.</p> <p>uwaga: od wersji 12 bazy danych sql azure te ograniczenia nie mają już zastosowania.</p><p>nie ma czegoś takiego jak „indeks główny”. istnieje coś takiego jak „klucz podstawowy”, a także coś takiego jak „indeks klastrowany”. odrębne koncepcje, często mylone. mając na uwadze to rozróżnienie, przejdźmy ponownie do pytania:</p><p>p1) czy można zmodyfikować indeks klastrowy w tabeli sql azure?<br> a: tak. użyj <code>with (drop\_existing=on)</code>:</p><pre><code>create table friend ( userid int not null, id int not null); go create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>q2) czy można zmodyfikować indeks klastrowy tabeli z ograniczeniem klucza podstawowego?<br> odp .: tak, tak samo jak powyżej, o ile ograniczenie klucza podstawowego nie jest egzekwowane przez indeks klastrowany:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>p3) czy można zmodyfikować ograniczenie klucza podstawowego tabeli?<br> o: tak, dopóki podstawowe ograniczenie nie jest egzekwowane przez indeks klastrowany:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); go create clustered index cdxfriend on friend (userid, id); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key nonclustered (userid) go </code></pre><p>p4) czy klucz podstawowy tabeli może być modyfikowany, gdy jest egzekwowany przez indeks klastrowany?<br> odp .: tak, jeśli tabela nigdy nie miała żadnych wierszy:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key clustered (id, userid) go </code></pre><p>p5) czy klucz podstawowy tabeli można modyfikować, gdy jest wymuszany przez indeks klastrowany, jeśli tabela jest zapełniona?<br> o: nie. każda operacja, która przekształca zapełniony indeks klastrowany w stertę, zostanie zablokowana na sql azure, <em>, nawet jeśli tabela jest pusta </em>:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); delete from friend; go alter table friend drop constraint pk\_friend; </code></pre><p>na marginesie: ograniczenie można zmodyfikować, jeśli tabela jest <em> obcięta </em>.</p><p>obejściem problemu zmiany ograniczenia pk w zapełnionej tabeli jest zrobienie starego dobrego <a href="http://msdn.microsoft.com/en-us/library/ms188351.aspx"><code>sp\_rename</code></a> trick:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); go create table friendnew ( userid int not null, id int not null identity(1,1), constraint pk\_friend\_new primary key clustered (id, userid)); go set identity\_insert friendnew on; insert into friendnew (userid, id) select userid, id from friend; set identity\_insert friendnew off; go begin transaction exec sp\_rename 'friend', 'friendold'; exec sp\_rename 'friendnew', 'friend'; commit; go sp\_help 'friend'; </code></pre><p><code>sp\_rename</code> podejście ma pewne problemy, najważniejsze jest to, że uprawnienia do tabeli nie są przenoszone podczas zmiany nazwy, a także ograniczenia klucza obcego.</p> <p>ma więcej kolumn niż pokaż status tabeli; ale robi sztuczkę:</p><pre><code>select * from information\_schema.tables where table\_schema = database(); </code></pre><p>aktualizacja 2011-06-07 19:02</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = database(); </code></pre><p>te zapytania działają, jeśli ustawisz bieżącą bazę danych.</p><p>możesz także kodować konkretną bazę danych:</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = 'mysql'; </code></pre> <p>myślę, że w zapytaniu o milion rekordów musisz unikać rzeczy takich jak <code>outer joins</code>. sugeruję użycie <code>union all</code> zamiast <code>left join</code>. tak długo, jak myślę, że <code>cross apply</code> jest bardziej wydajny niż pod-zapytanie w klauzuli select, zmodyfikuję zapytanie napisane przez conarda frixa, co moim zdaniem jest poprawne.</p><p>teraz: kiedy zacząłem modyfikować zapytanie, zauważyłem, że masz klauzulę where: <code>joinedtable.wherecolumn in (1, 3)</code>. w takim przypadku, jeśli pole jest puste, warunek stanie się fałszywy. to dlaczego używasz left join podczas filtrowania wierszy o wartości zerowej? wystarczy zastąpić <code>left join</code> <code>inner join</code>, gwarantuję, że będzie szybciej.</p><p><strong>około indeks:</strong></p><p>pamiętaj, że jeśli masz indeks na stole, powiedzmy</p><pre><code>table1(a int, b nvarchar) </code></pre><p>a twój indeks to:</p><pre><code>nonclustered index ix1 on table1(a) </code></pre><p>i chcesz zrobić coś takiego:</p><pre><code>select a,b from table1 where a &lt; 10 </code></pre><p>w swoim indeksie nie uwzględniłeś kolumny <code>b</code>, więc co się stanie?</p><p>jeśli serwer sql używa twojego indeksu, będzie musiał przeszukać indeks o nazwie <strong>„index seek”</strong>, a następnie odwołać się do głównej tabeli, aby uzyskać kolumnę <code>b</code>, o nazwie <strong>„wyszukaj”</strong>. ta procedura może potrwać znacznie dłużej niż skanowanie samej tabeli: <strong>„skanowanie tabeli”</strong>.</p><p>ale w oparciu o statystyki serwera sql-serwer w takich sytuacjach może w ogóle nie używać twojego indeksu.</p><p>więc najpierw sprawdź <code>execution plan</code>, aby zobaczyć, czy indeks jest w ogóle używany.</p><p>jeśli tak lub nie oba, zmień indeks, aby uwzględnić wszystkie wybrane kolumny. powiedz jak:</p><pre><code>nonclustered index ix1 on table1(a) include(b) </code></pre><p>w takim przypadku wyszukiwanie nie będzie potrzebne, a zapytanie zostanie wykonane o wiele szybciej.</p> Instagram ma opcję blokowania oznaczania. Konta firmowe mogą wybrać opcję, że tylko zatwierdzeni partnerzy mogą oznaczać konto na swoich zdjęciach. Być może to jest Twój przypadek. <p>z wiersza poleceń systemu linux</p><pre><code>for proc\_to\_kill in `mysql -h... -u... -p... -a --skip-column-names -e"show processlist" | grep -v "system user" | awk '{print $1}'` ; do mysql -h... -u... -p... -a --skip-column-names -e"kill query ${proc\_to\_kill}" ; done </code></pre><p>możesz zmienić opcję grep w nagłówku pętli for, aby zlokalizować określonego użytkownika lub określony ciąg w zapytaniu.</p><p>jeśli masz mysql 5.1, w którym lista procesów znajduje się w pliku informacje\_schema, możesz to zrobić, aby wygenerować polecenia kill query zbiorczo z poziomu klienta mysql:</p><pre><code>select group\_concat(concat('kill query ',id,';') separator ' ') killquery from information\_schema.processlist where user&lt;&gt;'system user'\g </code></pre><p>możesz wykonać klauzule where dla pola info, aby wyszukać określone zapytanie, pole time dla zapytań długo działających lub pole db dla określonej bazy danych.</p> tak, też tak mam, więc doczytałam, że można zgłaszać takie osoby do wykasowania konta - jednak tego jeszcze nie uczyniłam z braku czasu na e-maile , ale można te osoby zablokować tak, że nie będą mogli nas obserwować - 



> 
> 1. klikasz na nick tej osoby, tak żeby się otworzyła informacja o niej
> 2. w polu gdzie jest nick, w prawym górnym rogu jest takie **malutkie i szare koło zębate**, po najechaniu myszką na to kółko widzimy **block**
> 3. **blokujemy** i już nie mamy tej osoby widocznej na liście obserwujących nas osób
> 
> 
> 


u mnie zadziałało, jednak przez pewien okres czasu codziennie jedna taka osoba z linkiem do sex stron, dodawała mnie do listy swoich znajomych, więc sprawdzaj codziennie - na szczęście, po jakimś czasie odpuszczają :) <p>w witrynach, w których pracowałem, wszelkie zmiany, które należy wprowadzić w instancjach produkcyjnych, muszą być skryptowane jako skrypty zmian, które będą działać w sql * plus; ponadto skrypty potrzebne do odtworzenia od podstaw wszystkich obiektów schematu muszą być aktualizowane. wszystkie te skrypty są sprawdzane pod kątem kontroli zmian i stamtąd migrowane.</p><p>możesz kontrolować zmiany ddl lub używać wyzwalaczy ddl, aby wykrywać zmiany, a nawet używać oprogramowania różnicowego do porównywania dwóch wystąpień, ale metody te są niedyskryminujące; często programista wprowadza i cofa wiele zmian w schemacie (np. małe zmiany testowe, tworzenie fałszywych tabel do testowania koncepcji itp.) przed ustaleniem, co dokładnie należy zmienić.</p> <p>byłbym bardzo podejrzliwy wobec jakiegokolwiek zestawu uniwersalnych najlepszych praktyk, ponieważ w większości tych dziedzin diabeł tkwi w szczegółach. to, że informacje są stosunkowo powszechne, nie oznacza, że ​​aplikacja korzysta z danych dokładnie w taki sam sposób, jak inne aplikacje. oznacza to, że twój model danych może być nieco inny.</p><ul> <li>imię i nazwisko: dlaczego przechwytujesz imię? jeśli masz obowiązek przechwycenia pełnego imienia i nazwiska osoby (tj. przygotowujesz dokumenty prawne lub akty urodzenia), prawdopodobnie chcesz dać ludziom więcej miejsca na pisanie niż gdybyś tylko prosił o imię i nazwisko osoby, więc wezwać ich w nowej aplikacji internetowej.</li> <li>adres: co zamierzasz zrobić z adresem? jakie adresy przechowujesz? jeśli przechowujesz adres nieruchomości w stanach zjednoczonych, na której tworzysz hipotekę, prawdopodobnie bardzo zależy ci na uzyskaniu w pełni znormalizowanego adresu, w którym to przypadku model danych prawdopodobnie będzie chciał bardzo blisko pod dowolnym adresem narzędzie normalizacyjne zwraca. jeśli chcesz tylko, aby ludzie mogli wpisać adres w celu dostarczenia produktu, prawdopodobnie wystarczy kilka wierszy tekstu swobodnego. długość linii może zależeć od wymagań dalszych procesów, które wykonują takie czynności jak drukowanie etykiet adresowych.</li> <li>stan: zakładając, że możesz zidentyfikować prawidłowe wartości stanu, prawdopodobnie sensowne jest utworzenie tabeli <code>state</code> i utworzenie relacji klucza obcego między tabelami <code>state</code> i <code>address</code>. ale możliwość zidentyfikowania prawidłowych wartości oznacza, że ​​ograniczasz zestaw prawidłowych adresów przynajmniej do określonego zestawu krajów. to jest w porządku dla wielu stron, ale musisz trochę popracować, aby wesprzeć nowy kraj.</li> <li>miasto: jeśli masz do czynienia z danymi, w których istnieją potencjalnie regulacje na poziomie miasta (tj. w których istnieją różne rodzaje stawek podatkowych, które są stosowane w zależności od miasta), możesz chcieć traktować je podobnie jak państwo i mieć <code>city</code> tabela z prawidłowymi miastami i relacja klucza obcego między tabelami <code>city</code> i <code>address</code>. z drugiej strony, jeśli próbujesz tylko dostarczyć produkt i nie przejmujesz się tym, że masz w tabeli różne wersje tego samego miasta, wystarczy, że użytkownik wprowadzi dowolny tekst. oczywiście, jeśli przechowujesz klucze obce, będziesz mieć sporo pracy, aby upewnić się, że masz wszystkie prawidłowe wartości. ale są produkty, w których chodzi o to, że firma już wykonała tę pracę (tj. bazy danych podatków od sprzedaży).</li> <li>telefon: co robisz z numerami telefonów i dlaczego? niektóre aplikacje będą chciały pobierać numery telefonów w dowolnym formacie, w którym użytkownik zdecyduje się je wprowadzić i zachować to formatowanie dla wszystkich kolejnych zapytań. byłoby to powszechne, jeśli projektujesz osobistą książkę adresową, w której użytkownicy mają własne preferencje dotyczące sposobu przechowywania i wyświetlania numerów telefonów. inne aplikacje chciałyby zignorować wprowadzone formatowanie, wyodrębnić tylko znaki numeryczne, a następnie sformatować dane przy pobieraniu, aby wszystkie numery telefonów miały podobne formatowanie. jeśli prowadzisz działalność dla firm, możesz chcieć wprowadzić oddzielne pole dla użytkowników, aby wprowadzić rozszerzenie. jeśli próbujesz wesprzeć proces połączeń wychodzących, możesz chcieć przechowywać numer kierunkowy i kod kraju w osobnych kolumnach, ponieważ chcesz mieć pewność, że masz okna specyficzne dla strefy czasowej do nawiązywania połączeń z osobami o różnych numerach kierunkowych (tworzenie połączenie z kimś ze wschodniej strefy czasowej o 10 rano będzie znacznie lepsze niż wykonanie tego samego połączenia z kimś w strefie czasowej pacyfiku, gdzie jest 7 rano).</li> <li>płeć: w przypadku wielu aplikacji jest całkowicie rozsądne przechowywanie kodu płci („m” lub „f”) w tabeli. z drugiej strony zdarzają się sytuacje, w których możesz chcieć dodatkowych opcji (inne, interseksualne, transseksualne) lub gdy musisz przechowywać coś takiego jak płeć przy urodzeniu i aktualna płeć.</li> </ul> usuniesz profil, ale odpowiedzi i pytania zostaną ;)  
będzie na nicku pisac jeszcze blocked czy coś takiego ;d