gpt4 book ai didi

windows-phone-7 - 芒果 SQL CE : DeleteRule ="Cascade" not working

转载 作者:行者123 更新时间:2023-12-03 23:36:17 25 4
gpt4 key购买 nike

我正在尝试在删除父行时删除 Db 中的所有子级的两列之间建立 FK 关系。我的定义如下:

    [Table]
public class Parent
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
public int Id { get; set; }

[Column]
public string Dummy
{
get { return "dummy"; }
set { }
}

private EntitySet<Child> _children;

[Association(Name = "FK_Parent_Child", DeleteRule = "CASCADE", OtherKey = "ParentId", ThisKey="Id", Storage="_children")]
public EntitySet<Child> Children
{
get
{
return _children;
}
set
{
_children.Assign(value);
}
}

public Parent()
{
_children = new EntitySet<Child>(
item => item.Parent = this,
item => item.Parent = null);
}
}

[Table]
public class Child
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
public int Id { get; set; }

[Column]
public int? ParentId { get; set; }

private EntityRef<Parent> _parent;
[Association(Name="FK_Child_Parent", ThisKey = "ParentId", Storage = "_parent", OtherKey = "Id", IsForeignKey = true, DeleteRule="CASCADE")]
public Parent Parent
{
get
{
return _parent.Entity;
}
set
{
var previousValue = _parent.Entity;
if (previousValue != value || !this._parent.HasLoadedOrAssignedValue)
{
if (previousValue != null)
_parent.Entity = null;

_parent.Entity = value;
if (value != null)
ParentId = value.Id;
else
ParentId = null;
}
}
}

}

据我所知,这似乎 FK 的实现似乎有效。向 Db 添加父行会自动添加子行;选择父行会正确填充所有相关子项的 Children 属性。

我还希望能够删除数据库中的父行,并让该删除也删除所有相关的子行。使用此设置,当我删除父项时,我收到错误“无法删除主键值,因为对此键的引用仍然存在。[外键约束名称 = FK_Child_Parent]”。

看来 DeleteRule="Cascade"没有得到尊重,但我不知道为什么。

最佳答案

我知道已经很晚了,但我遇到了同样的问题,这是我找到的第一篇文章。
我想说的是,一切正常。

您可能不应该将规则名称大写。并在父实体上设置 DeleteRule。

这是我的工作代码。

父实体字段。

    private EntitySet<ExerciseDataContext> _exercises = new EntitySet<ExerciseDataContext>();

[Association(Name = Constants.ForeignKeysNames.KF_GROUP_EXERCISE, Storage = "_exercises", OtherKey = "GroupID", ThisKey = "ID", DeleteRule = "Cascade")]
public ICollection<ExerciseDataContext> Exercises
{
get { return _exercises; }
set { _exercises.Assign(value); }
}

和子实体字段。
private EntityRef<GroupDataContext> _group = new EntityRef<GroupDataContext>();

[Association(Name = Constants.ForeignKeysNames.KF_GROUP_EXERCISE, IsForeignKey = true, Storage = "_group", ThisKey = "GroupID")]
public GroupDataContext Group
{
get { return _group.Entity; }
set { _group.Entity = value; }
}

希望它会帮助某人。

关于windows-phone-7 - 芒果 SQL CE : DeleteRule ="Cascade" not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9729603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com