我正在使用 Entity Framework 6 + C# + WPF。我有这样的模型(好吧,简单一点的版本)
public class User
{
[Key]
public long UserId { get; set; }
[Column(TypeName = "VARCHAR")]
[StringLength(100)]
[Index("UserName", IsUnique = true)]
public string UserName { get; set; }
}
public class LogEntry : IEquatable<LogEntry>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public long UserId { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }= new User();
public string Message {get;set;}
}
当我尝试将新的 LogEntries
添加到数据库中时,出现错误:
SqlException: Cannot insert duplicate key row in object 'dbo.Users' with unique index UserName
但是,我不想将引用的用户添加到数据库中...
LogEntry.UserId
具有表 Users
中已存在行的 id,就像 LogEntry.User
具有现有行的 id和现有记录的userName
。我只想保存对该表的引用(外键),而不是添加新记录。
user = context.Users.FirstOrDefault(c => c.UserName == user.UserName);
foreach (LogEntry item3 in items)
{
item3.User = user;
item3.UserId = user.UserId; ;
}
.
.
.
context.Logs.AddRange(logs);
context.SaveChanges();
我该怎么做?我做错了什么?
最佳答案
EF 认为您想要向数据库添加新用户,因为 User
属性被分配了它认为是新用户的内容。如果您只是将其设置为空,但将 UserId
分配给正确的值,它应该保留引用而不添加新用户。
foreach (LogEntry item3 in items)
{
item3.User = null; //Don't need to do this if it's already null
item3.UserId = user.UserId;
}
关于c# - SQLException : Cannot insert duplicate key row in object 'dbo.Users' with unique index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73205008/