就像标题所说,我对实体框架有疑问......
我想在带有标识主键列的表格上将数据插入到我的数据库中...
但是当我创建没有像这样的ID的对象时......
var p= new T_Person() { Name = "Test", Gender='m', Age=19 };
并尝试将其添加到我的数据库中......
DbContext.T_Person.Add(p); DbContext.SaveChanges();
我总是得到一条消息错误,当我想在我的表中添加一个条目时,我需要将IDENTITY INSERT设置为ON,因为PersonID自动具有值0 ...
编辑1: 我使用模型第一方法,人类是自动生成的......
namespace Model
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
public partial class T_Person
{
public T_Person()
{
...
}
public int PersonID { get; set; }
public string Name{ get; set; }
public char Gender{ get; set; }
public int Age{ get; set; }
...
如果我像这样添加了带有DatabaseGenerated的Attribute:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PersonID { get; set; }
接下来的问题是如何获取我的Person对象的ID属性的生成值?我知道我可以使用“SELECT IDENT_CURRENT('T_Person')”SQL命令获取当前的Identity值,但是当我尝试查找具有ID值的人时:
var addedPerson = ctx.T_Person.FirstOrDefault(pe => pe.PersonID == id);
id是具有SQL Command ...
值的属性编辑2:
save方法如下所示:
using (var transaction = DbContext.Database.BeginTransaction())
{
ObservableCollection<T_PersonContakt> pContacts = new ObservableCollection<T_PersonContakt>();
try
{
var p= new T_Person() { Name = "Test", Gender='m', Age=19 };
ctx.T_Person.Add(pers);
ctx.SaveChanges();
foreach (var contact in PersonContacts)
{
pContacts.Add(new T_PersonKontakt()
{
TypeID = contact.TypeID,
Priority = contact.Priority,
PersonID = id, // HERE I NEED THE ID OF THE INSERTED PERSON
Value = contact.Value
});
}
ctx.SaveChanges();
ctx.T_Person.FirstOrDefault(p => p.PersonID == id).T_PersonContakt = pContacts;
ctx.SaveChanges();
transaction.Commit();
}
catch (Exception e)
{
transaction.Rollback();
}
}
编辑3 :
就像我在编辑2中所说的那样,我的尝试是用标量SQL命令获取身份的当前值,但我不知道这是否安全,因为该应用程序被多个用户使用。
所以我不知道如果两个用户试图同时插入一个人是否会出现问题......