如果我有用户
public class User : BaseEntity
{
public int Id { get; set; }
public AddressId {get;set;}
public Address Address {get; set;}
}
和一个地址类
public class Address : BaseEntity
{
public int Id { get; set; }
}
因此,只有这是一对一的,只有用户与另一端有连接。
如何使用流畅的API进行设置,我的通用SaveOrUpdate方法是否可以考虑一次性保存图表?
public static async Task<T> SaveOrUpdateAsync<T>(this GSCMContext context, T updated) where T : BaseEntity
{
if (updated == null)
return null;
if (updated.IsPersisted)
{
T existing = context.Set<T>().Find(updated.Id);
if (existing != null)
{
context.Entry(existing).CurrentValues.SetValues(updated);
await context.SaveChangesAsync();
}
return existing;
}
context.Set<T>().Add(updated);
await context.SaveChangesAsync();
return updated;
}
答案 0 :(得分:0)
我可以通过两种方式建议配置一对一关系:
ModelBuilder.Entity<User>().HasOptional(u => u.Address).WithOptionalPrincipal();
此处地址将具有自己的标识列,以及具有FK到用户的User_Id列。
ModelBuilder.Entity<User>().HasOptional(u => u.Address).WithOptionalDependent();
此处地址将具有自己的标识列,并且用户将具有带有FK到地址的Address_Id列。
如果您想告诉EF它应该填充用户模型中的AddressId
,您必须将关系配置为一对多:
ModelBuilder.Entity<User>().HasOptional(u => u.Address).WithMany().HasForeignKey(u => u.AddressId);
这样做的缺点是你必须实现逻辑以确保每个用户只能有一个地址。
请注意,根据需要配置一对一关系将导致EF重用依赖实体的主实体的Id,即依赖实体的表中不会有其他FK列。