我有一个表API,其中有两个文件密钥和URL。键是主键。另一个具有APIKey(FK)和ActionKey(String)的表API_Action。 APIKey是API表的PrimaryKey,ActionKey是主键。我有另一个表Permission,其中包含APIKey(FK),Name,Description,Key之类的列。 APIKey是API表的主键。
我想使用entityFramework核心存储数据。但这给了我错误。
<code>
public class API
{
public string Key { get; set; }
public string ServiceUri { get; set; }
public virtual List<Action> Actions { get; set; } = new List<Action>();
public virtual List<PermissionType> PermissionTypes { get; set; } = new List<PermissionType>();
}
public class Action
{
public string ActionKey { get; set; }
public string APIKey { get; set; }
public virtual API API { get; set; }
}
public class PermissionType
{
public string APIKey { get; set; }
public string Key { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual API API { get; set; }
}
</code>
我使用FluentAPI定义了关系。
<code>
modelBuilder
.Entity<Models.System.API>(b => b.ToTable("tbl_System_API").HasKey(o => o.Key))
.Entity<Models.System.Action>(b => b.ToTable("tbl_System_API_Action").HasKey(o => new { o.ActionKey, o.APIKey }))
.Entity<Models.System.Action>(b => b.ToTable("tbl_System_API_Action").HasOne(o => o.API).WithMany(o => o.Actions).HasForeignKey(o => o.APIKey))
.Entity<PermissionType>(b => b.ToTable("tbl_System_PermissionType").HasKey(o => o.Key))
.Entity<PermissionType>(b => b.ToTable("tbl_System_PermissionType").HasOne(o => o.API).WithMany(o => o.PermissionTypes).HasForeignKey(o => o.APIKey))
</code>
保存时我正在使用
<code>
foreach (var api in apis)
{
var actionss = actions.Where(o => o.APIKey == api.Key).ToList();
api.Actions.AddRange(actionss);
}
foreach (var api in apis)
{
var permissionTypess = permissionTypes.Where(o => o.APIKey == api.Key).ToList();
api.PermissionTypes.AddRange(permissionTypess);
}
dataContext.APIs.AddRange(apis);
dataContext.Save();
</code>
我遇到了错误。 无法跟踪实体类型“ PermissionType”的实例,因为已经跟踪了另一个具有相同{{APIKey'}的键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用'DbContextOptionsBuilder.EnableSensitiveDataLogging'查看冲突的键值。
我想将父表和子表与FK关系一起存储。
因此,API表应具有值,并且Action和PermissionType表应使用API表和其他字段的FK填充。