saeed rajabi Ответов: 3

Как вставить некоторое значение в таблицу с автоинкрементом в C# и entity framework?


я не могу дать(пройти) Имя,ABBR для моей функции insert_city
public string city, abbr;

public string NAME
{
get { return city; }
set { city = value; }
}
public string ABBR
{
get { return abbr; }
set { abbr = value; }
}



public static string insert_city()
{

SqlParameter[] p = new SqlParameter[2];
p[0] = new SqlParameter("@NAME",NAME.get);
p[1] = new SqlParameter("@ABBR",ABBR.get);
return DAL.project.SqlDataProvider.insert_city(p);
}


Что я уже пробовал:

используется архитектура 3tire с двумя библиотеками классов(bll,dal)
мой код ДАЛС является :


общественности статической строки insert_city()
{
bookingEntities db = новые bookingEntities();
CITY ct = новый город();
ct.NAME = @имя;
ct.ABBR = @ABBR;
дБ.города.Добавить(ct);
дБ.Метод SaveChanges();
возвращение ct.NAME;
}



в моем коде blls :

использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование DAL.project;

использование System.Data;
использование системы.Конфигурация;
использование System.Linq;
использование системы.Сеть;


используя системы.В формате XML.В LINQ;
используя системы.Данных.Поставщики sqlclient;
пространство имен BLL.project
{
общедоступный класс DataProvider
{
публичный поставщик данных()
{

}
общественный струнный город, аббр;

публичное строковое имя
{
get { return city; }
набор { город = значение; }
}
общественного строка сокр
{
get { return abbr; }
set { abbr = значение; }
}

//
общественности статической строки insert_city()
{

SqlParameter[] p = новый SqlParameter[2];
p[0] = новый SqlParameter("@NAME",NAME.get);
p[1] = новый SqlParameter("@ABBR",ABBR.get);
вернуться даль.проект.Sqldataprovider все.insert_city(п);
}

и в моем персональном коде :

общественный разделяемого класса Default4 : система.Веб.Пользовательского интерфейса.Страницы
{
DataProvider obj = новый DataProvider();
охраняемых недействительными Button15_Click(объект отправителя, EventArgs в электронной)
{
obj.city = конвертировать.ToString(TextBox4.Text);
параметр obj.сокр = конвертировать.ToString(TextBox5.Text);
если (!строка.IsNullOrEmpty(obj.city))
{
если (!строка.IsNullOrEmpty(obj.abbr))
{
строка ci = BLL.project.Объект dataProvider.insert_city();
Label28.Текст = "شهر" + Ди + " ها به لیست شهر اضافه شد.";
}
еще
{
Label28.Text = "اختصار نمیتواند خالی باشد.";
}
}
еще
{
Label28.Text = " نام شهر نمی تواند خالی باشد.";
}
}
}

3 Ответов

Рейтинг:
2

Richard Deeming

Не видя декларации вашей CITY класс, трудно сказать. Но это звучит так, как будто вы забыли добавить DatabaseGenerated атрибут к CITYID собственность:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int CITYID { get; set; }


saeed rajabi

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

Рейтинг:
1

Raul Iloc

Ошибка произошла из-за того, что вы пытаетесь установить значение в поле автоинкремента CITYID.

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

Поэтому вы должны исправить свой код следующим образом:

bookingEntities db = new bookingEntities(); 
CITY ct = new CITY();
ct.NAME = city_name;
ct.ABBR = city_abbr;
db.CITies.Add(ct);
db.SaveChanges();


Теперь, когда вы дали нам более подробную информацию, кажется, что вы используете подход code first, поэтому решение состоит в том, чтобы использовать следующий атрибут для ваших полей автоинкремента:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Более подробную информацию вы найдете в следующей статье: Построение модели Code-First с использованием атрибутов в Entity Framework[^]


saeed rajabi

я сделал это, но db.savechanges(); это проблема
пожалуйста, посетите эту фотографию :

http://s6.uplod.ir/i/00794/vgkgwkijm2d2.jpg

Raul Iloc

Смотрите обновления в моем решении выше!

saeed rajabi

ладно

saeed rajabi

я обновил свой код Пожалуйста смотрите еще раз

Рейтинг:
0