[英]Entity Framework find foreign key value and update row
我有 2 张表User
和Connections
。 当User
登录时,如果用户存在,我想存储连接并更新行,如果不在连接表中,则创建。
public class UserContext : DbContext
{
public UserContext(DbContextOptions<UserContext> options) : base(options) { }
public DbSet<User>? Users { get; set; }
public DbSet<Connection>? Connections { get; set; }
}
public class User
{
[Key]
[Required]
public string? UserName { get; set; }
public string? Password { get; set; }
public string? Email { get; set; }
public DateOnly Date { get; set; }
public int? ChessScore { get; set; }
public string? Group { get; set; }
[Required]
public ICollection<Connection>? Connections { get; set; }
}
public class Connection
{
[Required]
public string? ConnectionID { get; set; }
[Required]
public string? UserAgent { get; set; }
[Required]
public bool Connected { get; set; }
( **Foreign key column** ) <---- query this column
}
我的问题是,如果找到特定值,我如何能够查询Connection
( Username ) 中的外键列并更新该行?
我现在的代码
if (user == null)
{
user = new User
{
UserName = name,
Connections = new List<Connection>()
};
db.Users.Add(user);
}
// var result1 = db.Users.Include(m => m.Connections);
var result = db.Connections.SingleOrDefault(b => b.UserName == name);
if (result1 != null)
{
result.ConnectionID = Context.ConnectionId;
result.UserAgent = Context.GetHttpContext()?.Request.Headers["User-Agent"];
result.Connected = true;
}
else
{
user.Connections.Add(new Connection
{
ConnectionID = Context.ConnectionId,
UserAgent = Context.GetHttpContext()?.Request.Headers["User-Agent"],
Connected = true
});
}
db.SaveChanges();
我无法添加Username { get; set; }
Username { get; set; }
Username { get; set; }
到 model 没有它抱怨影子 state 和失败(理解为什么这样做)
试试下面的代码。 想法是用它的连接加载用户 - 正常的 EF 流。
var user = db.Users
.Include(u => u.Connections) // you can apply filter here
.Where(u => u.UserName = name)
.FirstOrDefault();
if (user == null)
{
user = new User
{
UserName = name,
Connections = new List<Connection>()
};
db.Users.Add(user);
}
var connection = user.Connections.FirstOrDefault();
if (connection == null)
{
connection = new Connection();
user.Connections.Add(connection);
}
connection.ConnectionID = Context.ConnectionId;
connection.UserAgent = Context.GetHttpContext()?.Request.Headers["User-Agent"];
connection.Connected = true;
db.SaveChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.