实体框架插入中的一对一关系
One to One relation in Entity frame work Insert
我有 2 个 table,用户和员工
CREATE TABLE [dbo].[Users](
[UserID] [int] IDENTITY NOT NULL,
[Username] [nvarchar](8) NOT NULL,
[Activo] [bit] NOT NULL,
[UltimoAcesso] [datetime] NULL,
PRIMARY KEY (UserID)
)
CREATE TABLE [dbo].[Employees](
[ColaboradorID] [int] IDENTITY(1,1) NOT NULL,
[Nome] [nvarchar](100) NOT NULL,
[Email] [nvarchar](100) NULL,
[UserID] [int] NULL
PRIMARY KEY(ColaboradorID),
UNIQUE (UserID)
)
ALTER TABLE [dbo].[Employees] WITH CHECK ADD CONSTRAINT [FK_Employees_UtilizadorID] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([UserID])
ON UPDATE CASCADE
ON DELETE CASCADE
我首先使用 Entity FrameWork 数据库。
我正在尝试插入一个新用户
public void fvAddUser_InsertItem()
{
var item = new InventarioCiclico.Users();
using (InventarioCiclicoContext db = new InventarioCiclicoContext())
{
Employee c = new Employee ();
c.Nome = (fvAddUser.FindControl("txtNome") as TextBox).Text;
c.Email = (fvAddUser.FindControl("txtEmail") as TextBox).Text;
item.Employee.Add(c);
var employee = db.Set<Employee>();
TryUpdateModel(item);
if (ModelState.IsValid)
{
if (db.Users.Any(u => u.Username == item.Username))
{
// Handle exception
}
else
{
db.Users.Add(item);
db.SaveChanges();
var userID = item.UserID;
c.UserID = userID;
employee.Add(c);
db.SaveChanges();
}
}
}
}
但是它总是给我违反唯一值的异常?在开始使用 entity framework 之前,我会先在用户 table 上插入,然后获取 scope_identity 并在员工 table 上插入,我正在尝试使用 EF6 执行此操作,但我不知道我不知道该怎么办。
您要在数据库中添加两名具有相同 UserId
的员工,并且由于 UserId
是员工 table 中的唯一字段,您将获得违反唯一值的例外情况。
在 item.Employee.Add(c);
行中,您将员工添加到用户,因此,在将用户添加到数据库时,员工将被添加两个。所以你不需要最后三行:
c.UserID = userID;
employee.Add(c);
db.SaveChanges();
我有 2 个 table,用户和员工
CREATE TABLE [dbo].[Users](
[UserID] [int] IDENTITY NOT NULL,
[Username] [nvarchar](8) NOT NULL,
[Activo] [bit] NOT NULL,
[UltimoAcesso] [datetime] NULL,
PRIMARY KEY (UserID)
)
CREATE TABLE [dbo].[Employees](
[ColaboradorID] [int] IDENTITY(1,1) NOT NULL,
[Nome] [nvarchar](100) NOT NULL,
[Email] [nvarchar](100) NULL,
[UserID] [int] NULL
PRIMARY KEY(ColaboradorID),
UNIQUE (UserID)
)
ALTER TABLE [dbo].[Employees] WITH CHECK ADD CONSTRAINT [FK_Employees_UtilizadorID] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([UserID])
ON UPDATE CASCADE
ON DELETE CASCADE
我首先使用 Entity FrameWork 数据库。
我正在尝试插入一个新用户
public void fvAddUser_InsertItem()
{
var item = new InventarioCiclico.Users();
using (InventarioCiclicoContext db = new InventarioCiclicoContext())
{
Employee c = new Employee ();
c.Nome = (fvAddUser.FindControl("txtNome") as TextBox).Text;
c.Email = (fvAddUser.FindControl("txtEmail") as TextBox).Text;
item.Employee.Add(c);
var employee = db.Set<Employee>();
TryUpdateModel(item);
if (ModelState.IsValid)
{
if (db.Users.Any(u => u.Username == item.Username))
{
// Handle exception
}
else
{
db.Users.Add(item);
db.SaveChanges();
var userID = item.UserID;
c.UserID = userID;
employee.Add(c);
db.SaveChanges();
}
}
}
}
但是它总是给我违反唯一值的异常?在开始使用 entity framework 之前,我会先在用户 table 上插入,然后获取 scope_identity 并在员工 table 上插入,我正在尝试使用 EF6 执行此操作,但我不知道我不知道该怎么办。
您要在数据库中添加两名具有相同 UserId
的员工,并且由于 UserId
是员工 table 中的唯一字段,您将获得违反唯一值的例外情况。
在 item.Employee.Add(c);
行中,您将员工添加到用户,因此,在将用户添加到数据库时,员工将被添加两个。所以你不需要最后三行:
c.UserID = userID;
employee.Add(c);
db.SaveChanges();