Проблема решена. Это было в линии
a.HasKey("NameId", "Id");
в OnModelCreating
метод. Я использовал пример , где было написано большое количество настроек коллекций собственных типов.
После удаления поля «NameId» из определения ключа
a.HasKey("Id");
теперь все работает нормально.
Да, вы можете. Это должно сработать.
.
= любой символ \.
= собственно символ точки.?
= .{0,1}
= совпадение любого символа ноль или один раз.*
= .{0,}
= совпадение любого символа ноль или более раз. +
= .{1,}
= совпадение любого символа один или более раз [^]
должен соответствовать любому символу, включая новую строку. [^
СИМВОЛЫ ]
соответствия все символы за исключением тех, которые в СИМВОЛЫ . Если СИМВОЛЫ пусты, это соответствует всем символам.
пример JavaScript:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
.*
и.+
для любых символов за исключением новых строк.
На всякий случай, Вы были бы требуемый для включения новых строк, следующие выражения могли бы также работать на те языки, которые удваиваются, выход требуется, такие как Java или C++:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
для нуля или больше раз, или
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
в течение одного или нескольких раз.
Двойной выход не требуется для некоторых языков такой как, C#, PHP, Ruby, Perl, Python, JavaScript:
[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex_1 = "[\\s\\S]*";
final String regex_2 = "[\\d\\D]*";
final String regex_3 = "[\\w\\W]*";
final String string = "AAA123\n\t"
+ "ABCDEFGH123\n\t"
+ "XXXX123\n\t";
final Pattern pattern_1 = Pattern.compile(regex_1);
final Pattern pattern_2 = Pattern.compile(regex_2);
final Pattern pattern_3 = Pattern.compile(regex_3);
final Matcher matcher_1 = pattern_1.matcher(string);
final Matcher matcher_2 = pattern_2.matcher(string);
final Matcher matcher_3 = pattern_3.matcher(string);
if (matcher_1.find()) {
System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
}
if (matcher_2.find()) {
System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
}
if (matcher_3.find()) {
System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
}
}
}
Full Match for Expression 1: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 2: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 3: AAA123
ABCDEFGH123
XXXX123
<час> , Если Вы хотите исследовать выражение, оно было объяснено на верхней правой панели regex101.com . Если бы Вы хотели бы, можно также смотреть в эта ссылка , как она соответствовала бы против некоторых демонстрационных исходных данных.
<час>jex.im визуализирует регулярные выражения:
Нет, *
будет соответствовать нулю или более символов. Вместо этого вы должны использовать +
, что соответствует одному или нескольким параметрам.
Это выражение может подойти вам лучше: [A-Z] +123
Да, это сработает, но обратите внимание, что .
не будет соответствовать символам новой строки, если вы не передадите флаг DOTALL при компиляции выражения:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
Используйте шаблон .
для однократного сопоставления любого символа, . *
для сопоставления любого символа ноль или более раз, . +
для сопоставления любого символа один или несколько раз.
Существует множество сложных инструментов для тестирования и разработки regex, но если вам нужен простой тестовый харнесс на Java, вот один из них для вас:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Теперь вы можете легко добавлять новые тестовые примеры и пробовать новые шаблоны. Получайте удовольствие от изучения regex.