Я - tryring, чтобы сделать простую вставку с внешним ключом, но кажется, что я должен использовать db.SaveChanges()
для каждой рекордной вставки. Как мне может удаться использовать только один db.SaveChanges()
в конце этой программы?
public static void Test()
{
using (var entities = new DBEntities())
{
var sale =
new SalesFeed
{
SaleName = "Stuff...",
};
entities.AddToSalesFeedSet(sale);
var phone =
new CustomerPhone
{
CreationDate = DateTime.UtcNow,
sales_feeds = sale
};
entities.AddToCustomerPhoneSet(phone);
entities.SaveChanges();
}
}
После выполнения вышеупомянутого кода я получаю это исключение:
Система. Данные. UpdateException: ошибка произошла при обновлении записей. Посмотрите InnerException для деталей. Заданное значение не является экземпляром допустимого постоянного Названия параметра типа: значение.
Править: Измененный пример кода и добавленный возвратил исключение.
По всей видимости, использование UNSIGNED BIGINT
вызывает эту проблему. Когда я переключился на SIGNED BIGINT
, все заработало, как и должно было.
Я пытался сделать это "правильно way ":
И затем я написал это небольшое тестовое приложение для сканирования каталога, сохранения каталога и всех его файлов в двух таблицах:
static void Main(string[] args)
{
string directoryName = args[0];
if(!Directory.Exists(directoryName))
{
Console.WriteLine("ERROR: Directory '{0}' does not exist!", directoryName);
return;
}
using (testEntities entities = new testEntities())
{
StoredDir dir = new StoredDir{ DirName = directoryName };
entities.AddToStoredDirSet(dir);
foreach (string filename in Directory.GetFiles(directoryName))
{
StoredFile stFile = new StoredFile { FileName = Path.GetFileName(filename), Directory = dir };
entities.AddToStoredFileSet(stFile);
}
try
{
entities.SaveChanges();
}
catch(Exception exc)
{
string message = exc.GetType().FullName + ": " + exc.Message;
}
}
}
Как видите, у меня есть только один вызов .SaveChanges ()
в самом конце - работает как шарм, все как положено.
Что-то в вашем подходе должно быть облажалось с системой EF .....