c# - EF 核心:为什么添加子行但自动添加父行项?
问题描述
我添加子行但在父表上自动添加行!
我有 2 张桌子;子表是Permission
,父表是Respondent
。
Respondent
表是:
[Table("Respondent")]
[Serializable]
public class Respondent : IQuickSearchObject, IUIObject
{
#region Constructor
public Respondent()
{
//چون ریکرسیو ایجاد میکنه نباید تو کانسترکتور نیو بشه
// AccessGroupItem = new AccessGroup();
//PersonItem = new Person();
TradeFundID = -1;
IsAdmin = false; //for all user except for مدیر سیستم
//MyAccountingConfig = new AccountingConfiguration();
Permissions = new List<Permission>();
}
#endregion
#region Property
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
[Key, ForeignKey("ID")]
public long ID { get; set; }
[Column("password")]
public string Password { get; set; }
[Column("accessGroupID")]
// [NotMapped]
public long? accessGroupID { get; set; }
[NotMapped]
public virtual AccessGroup AccessGroupItem { get; set; }
[Column("personID")]
public long? personID { get; set; }
[NotMapped]
public virtual Person PersonItem { get; set; }
[NotMapped]
public virtual List<Permission> Permissions { get; set; }
#endregion
}
Permission
表是:
[Table("Permission")]
[Serializable]
public class Permission : IQuickSearchObject
{
#region Constructor
public Permission()
{
//چون ریکرسیو ایجاد میکنه نباید تو کانسترکتور نیو بشه
this.AccessCodeItem = new AccessCode();
this.AccessGroupItem = new AccessGroup();
this.RespondentItem = new Respondent();
}
#region Properties
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
[Key, ForeignKey("ID")]
public long ID { get; set; }
[ForeignKey("RespondentID")]
[Column("RespondentID")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long? RespondentID { get; set; }
//{
// get { return RespondentItem.ID; }
// set { RespondentItem.ID = value; }
//}
[NotMapped]
public virtual Respondent RespondentItem { get; set; }
#endregion
}
关系是:一个响应条目对多个权限条目。
modelBuilder.Entity<Respondent>()
.HasMany(e => e.Permissions)
.WithOne(e => e.RespondentItem)
.HasForeignKey(e => e.RespondentID)
.OnDelete(DeleteBehavior.NoAction);
添加代码是:
var AccessCodes = GetAccessCode(-1);
foreach (var item in AccessCodes)
{
Permission newPermission = new Permission
{
AccessGroupItem = accessGroupAdmin,
AccessGroupID= accessGroupAdmin.ID,
AccessCodeItem = item,
AccessCodeID= item.ID,
EntityID = 0,
PermissionLevel = ArmanEnums.PermissionLevel.Allowed,
RespondentID = customerPerson.ID,
};
SetPermission(newPermission, adminID.ID, -1, 0) ;
}
public long SetPermission(Permission newPermission, long userID, int transactionID, long serverOperationID)
{
var id = 0L;
var newItem = _dbLayer.UnitControlItem.PermissionRepository.Insert(newPermission);
_dbLayer.UnitControlItem.PermissionRepository.Save();
id = newItem.ID;
if (id != 0)
SetDataLog(
new DataLog(id, Command.Set, EntityType.Permission, ""),
userID, transactionID, serverOperationID);
return id;
}
为什么要在受访者表上自动添加行!
解决方案
为了完整性;
问题似乎是您正在创建一个Respondent
内部Permission Constructor
并将其分配给RespondentItem
public class Permission : IQuickSearchObject
{
#region Constructor
public Permission()
{
//چون ریکرسیو ایجاد میکنه نباید تو کانسترکتور نیو بشه
this.AccessCodeItem = new AccessCode();
this.AccessGroupItem = new AccessGroup();
this.RespondentItem = new Respondent();
}
...
删除该行将删除与其关联的空数据库记录。
推荐阅读
- microsoft-teams - 图形工具包团队频道选择器未在下拉列表中返回任何内容
- java - DataSnapshot 无法转换为 Adapter
- mysql - 在nodejs,mysql中为上传的图像添加标题并做出反应
- arrays - 如何在反应中使用复选框过滤我的api?
- google-cloud-platform - 如何在 GCP 中将自定义到期设置为服务到服务身份验证令牌
- python-3.x - 为什么在 manim 中使用曲线下面积会给我一个错误?
- html - 如何使用css在svg中添加从下到上流动的颜色
- node.js - React native 或 expo - 即使应用程序已死或尚未打开,您是否知道一种推送通知的方法?
- python-3.x - 根据另一个列表对列表中的项目进行分类
- swift - 将字典传递给视图并串联显示视图将不会呈现