c# - 实体框架,保存新数据库条目的问题
问题描述
我试图保存我的新数据库条目,但 ID 想要增加。
这是表格列:
我正在使用实体框架和 Windows 窗体。添加我的 postgresql 数据库后,它创建了 Procesor 类。
public partial class Procesor
{
public int ID { get; set; }
public string Naziv_Procesora { get; set; }
public Nullable<int> Godina_Proizvodnje { get; set; }
public string Naziv_Proizvodaca { get; set; }
public Nullable<int> Broj_Jezgri { get; set; }
public Nullable<double> Takt_Procesora { get; set; }
public Nullable<decimal> Cijena_Procesora { get; set; }
public virtual Konfiguracija_Racunala Konfiguracija_Racunala { get; set; }
}
}
之后我创建了用于生成绑定列表并插入数据库的新类
class Procesori
{
public BindingList<Procesor> DohvatiProcesore()
{
BindingList<Procesor> listaProcesora;
using (RacunalaEntities enteties = new RacunalaEntities())
{
listaProcesora = new BindingList<Procesor>(enteties.Procesors.ToList());
}
return listaProcesora;
}
public void unosProcesora(string naziv, int godina, string proizvodac, decimal cijena, int jezgre, double takt)
{
using (RacunalaEntities enteties = new RacunalaEntities())
{
Procesor procesor = new Procesor();
procesor.Naziv_Procesora = naziv;
procesor.Naziv_Proizvodaca = proizvodac;
procesor.Godina_Proizvodnje = godina;
procesor.Broj_Jezgri = jezgre;
procesor.Takt_Procesora = takt;
procesor.Cijena_Procesora = cijena;
enteties.Procesors.Add(procesor);
enteties.SaveChanges();
}
}
}
在我的表单中,我想将新处理器添加到数据库中,但我不能
我的表格代码:
public partial class Form1 : Form
{
RacunalaEntities context = new RacunalaEntities();
Procesori procesori = new Procesori();
public Form1()
{
InitializeComponent();
dataGridView1.DataSource = procesori.DohvatiProcesore();
}
private void btnDodajProcesore_Click(object sender, EventArgs e)
{
string nazivProcesora = txtNazivProcesora.Text;
int godinaProizvodnje = int.Parse(txtGodinaProizvodnje.Text);
string nazivProizvodaca = txtNazivProizvodaca.Text;
decimal cijenaProcesora = decimal.Parse(txtCijenaProcesora.Text);
int brojJezgri = int.Parse(txtBrojJezgri.Text);
double taktProcesora = double.Parse(txtTaktProcesora.Text);
procesori.unosProcesora(nazivProcesora,godinaProizvodnje,nazivProizvodaca,cijenaProcesora,brojJezgri,taktProcesora);
MessageBox.Show("Podaci su spremljeni");
}
}
错误代码:
PostgresException:428C9:无法插入“ID”列
解决方案
虽然@Dominik 的回答解决了这个问题,但它似乎很忙,因为我的数据库会很大。我需要一个一次性的解决方案来永远解决这个问题。我检查了 's 中的内容EntityFramework6.npgsql
并发现了PgTableColumns
's DefiningQuery
(在 中找到Resources\NpgsqlSchema.ssdl
)的问题,它没有is_identity
正确识别属性。所以,我决定改变它并使用那个 dll 而不是 Nuget 的
select
cast(a.attrelid as varchar) || '.' || cast (a.attnum as varchar) as id,
cast(c.oid as varchar) as table_id,
a.attname as name,
a.attnum as ordinal,
not a.attnotnull as is_nullable,
t.typname as type_name,
case
when t.typname in ('bpchar', 'varchar') and a.atttypmod != -1 then a.atttypmod - 4
when t.typname in ('bit', 'varbit') and a.atttypmod != -1 then a.atttypmod
else null
end as max_length,
case
when t.typname = 'numeric' and a.atttypmod != -1 then ((a.atttypmod - 4) >> 16) & 65535
else null
end as precision,
case
when t.typname in ('time', 'timestamp', 'timestamptz') and a.atttypmod != -1 then a.atttypmod
when t.typname = 'interval' and a.atttypmod & 65535 != 65535 then a.atttypmod & 65535
else null
end as datetime_precision,
case
when t.typname = 'numeric' and a.atttypmod != -1 then (a.atttypmod - 4) & 65535
else null
end as scale,
case
when t.typlen = -1 and t.typelem != 0 then true
else false
end as is_multiset,
null as collation_catalog_name,
null as collation_schema_name,
null as collation_name,
null as char_set_catalog_name,
null as char_set_schema_name,
null as char_set_name,
case when (select is_identity from information_schema.columns k where nspname=k.table_schema and
a.attname=k.column_name and c.relname= k.table_name) ='YES' then true else false end is_identity,
false as is_generated,
-- default value column
pg_get_expr(ad.adbin, ad.adrelid) as default_value
from pg_attribute a
join pg_class c
on a.attrelid = c.oid
join pg_namespace n
on c.relnamespace = n.oid
join pg_type t
on a.atttypid = t.oid
left join pg_attrdef ad
on a.attrelid = ad.adrelid and a.attnum = ad.adnum
where t.typtype = 'b' and c.relkind = 'r' and a.attnum >= 0 and c.relnamespace in
(select oid from pg_namespace where nspname not in ('pg_catalog','information_schema','pg_toast'))
推荐阅读
- javascript - jQuery AutoComplete - 如何访问返回值?
- mysql - mysql #1005 错误号 150
- mysql - 组合框未使用 bindingnavigator 记录选择器显示下一条记录
- python - Python 一次更新一个列表元素,直到达到 sum(list)
- shell - 如果停止,这是启动多个服务的更好方法吗
- r - 用于在混合 logit 模型中将主题设置为随机效应的最直接的 R 包
- python - 休眠python脚本执行直到进程完成
- c# - 将 Azure CloudPageBlob 复制到 CloudBlockBlob
- javascript - UI5 JavaScript 代码不工作,语义
- blogs - 如何在 hugo 中为每种内容类型添加菜单