- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下实体/表:
Board
: 一 block 板可以有很多pinPin
:一个引脚分配给一个板。该实体是抽象的,并且确实有具有不同实现的子实体。属于具有 InheritanceMapping
的父 pin 实体的所有子实体将被保存到 pin 表中并由 Discriminator 列
区分
TaskPin
:这是 pin 的一个子实现。它可以有很多任务。Task
:一个任务分配给一个TaskPin这里有一些代码可以让我的结构更清晰:
[Table]
public class Board : ModelBase
{
private int _boardId;
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity"
,CanBeNull = false, AutoSync = AutoSync.OnInsert)]
public int BoardId
{
get { return _boardId; }
set { SetProperty(ref _boardId, value); }
}
private EntitySet<Pin> _pins;
[Association(Storage = "_pins", OtherKey = "_boardId"
,ThisKey = "BoardId", DeleteRule = "CASCADE")]
public EntitySet<Pin> Pins
{
get { return _pins; }
set { _pins.Assign(value); }
}
public Board()
{
_pins = new EntitySet<Pin>(new Action<Pin>(this.addPin)
,new Action<Pin>(this.removePin));
}
private void addPin(Pin pin)
{
NotifyPropertyChanging("Pin");
pin.Board = this;
}
private void removePin(Pin pin)
{
NotifyPropertyChanging("Pin");
pin.Board = null;
}
}
[Table]
[InheritanceMapping(Code = PinType.TaskPin, Type = typeof(TaskPin)
,IsDefault = true)]
public abstract class Pin : ModelBase
{
private int _pinId;
[Column(IsPrimaryKey = true, IsDbGenerated = true
,DbType = "INT NOT NULL Identity", AutoSync = AutoSync.OnInsert)]
public int PinId
{
get { return _pinId; }
set { SetProperty(ref _pinId, value); }
}
[Column]
internal int _boardId;
private EntityRef<Board> _board;
[Association(Storage = "_board", ThisKey = "_boardId"
,OtherKey = "BoardId", IsForeignKey = true, DeleteOnNull = true)]
public Board Board
{
get { return _board.Entity; }
set
{
if (SetProperty(ref _board, value) != null)
{
_boardId = value.BoardId;
}
}
}
[Column(IsDiscriminator = true)]
public PinType Type { get; set; }
public Pin()
{
}
}
public class TaskPin : Pin
{
private EntitySet<Task> _tasks;
[Association(Storage = "_tasks", OtherKey = "_pinId"
,ThisKey = "PinId", DeleteRule = "CASCADE")]
public EntitySet<Task> Tasks
{
get { return _tasks; }
set { _tasks.Assign(value); }
}
public TaskPin()
{
_tasks = new EntitySet<Task>(new Action<Task>(this.addTask)
,new Action<Task>(this.removeTask));
}
private void addTask(Task task)
{
NotifyPropertyChanging("Task");
task.Pin = this;
}
private void removeTask(Task task)
{
NotifyPropertyChanging("Task");
task.Pin = null;
}
}
[Table]
public class Task : ModelBase
{
private int _taskId;
[Column(IsPrimaryKey = true, IsDbGenerated = true
,DbType = "INT NOT NULL Identity"
,CanBeNull = false, AutoSync = AutoSync.OnInsert)]
public int TaskId
{
get { return _taskId; }
set { SetProperty(ref _taskId, value); }
}
[Column]
internal int _pinId;
private EntityRef<Pin> _pin;
[Association(Storage = "_pin", ThisKey = "_pinId"
,OtherKey = "PinId"
,IsForeignKey = true
,DeleteOnNull=true)]
public Pin Pin
{
get { return _pin.Entity; }
set
{
if (SetProperty(ref _pin, value) != null)
{
_pinId = value.PinId;
}
}
}
public Task()
{
}
}
我创建了一个 TaskPin
并将其分配给一个板。然后我创建两个任务并将它们分配给 TaskPin。这确实很好用。当我尝试从 TaskPin
执行一个或多个 Tasks
时出现问题:
private void OnDeleteTasks(object sender, EventArgs e)
{
TaskPin taskPin = pin as TaskPin;
var completedTasks = taskPin.Tasks
.Where(x => x.IsDone == true)
.ToList();
foreach (var task in completedTasks)
{
taskPin.Tasks.Remove(task);
}
}
如果我在 DataContext
对象上调用 SubmitChanges()
,它将设置 TaskPin(继承自 Pin)的 Board 属性
为 null
。
public void Save(Pin pin)
{
// This is empty so no modified members are identified => Correct
var modifiedMembers = db.Pins.GetModifiedMembers(pin);
// Contains just one entry for the deleted Task entity => Correct
var changeSet = db.GetChangeSet();
// This call will immediately set Board property of Pin to null => Wrong!
db.SubmitChanges();
}
我预计 Task
会被删除,因为 DeleteOnNull
设置为 true 但我不知道为什么 Board property
的 Pin也设置为 null
,这将导致 NullPointerExceptio
或 Pin 也被删除。
我对这个主题进行了谷歌搜索,但没有找到任何可以解决我的问题的东西。一种替代方法是防止 Board 属性归零并手动为任务调用 DeleteOnSubmit()
。
最佳答案
在我看来,这种行为是有意为之的。
如果您查看 Task 类中的 Pin 属性,它被设置为在 Null (DeleteOnNull = true) 时删除,然后Task 中的 Pin 将按照 TaskPin 类中的 removeTask() 删除。然后查看Board 类中的removePin() 方法,它将Pin 的Board 设置为null。然后查看Pin 类中的Board 属性,DeleteOnNull 设置为true 这将从Board 中删除strong>Pin 设置为 null 时的实例。
关于c# - WP8 和 Linq to SQL 具有一对多关系 : SubmitChanges() removes wrong entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225103/
我正在尝试在我正在处理的博客上使用类别帖子 (WP-CPL) 插件来按类别过滤“最近的帖子”。基本上,当有人点击博客上的类别名称时,我希望它显示该类别的帖子。这将通过 Life Is Simple 模
我的形象 我只想为某些用户隐藏特定页面。 function remove_menus(){ // get current login user's role $roles = wp_g
我的形象 我只想为某些用户隐藏特定页面。 function remove_menus(){ // get current login user's role $roles = wp_g
我为我的 wp 网站创建了一个简单的脚本,我正在尝试从 2 个表的 wp 数据库中获取正确的数据,这是代码, 当我显示“user_ref_id”列的结果重复多次时,这是代码 global $wpdb;
我安装了一个名为 Hide My WP 的插件来更改网站结构,但考虑到我使用的是自定义主题,它破坏了一些功能。所以我手动从plugins文件夹中删除了插件,但是从那以后我就无法访问/wp-admin/
我试图从头开始创建 WXR 文件(WordPress eXtended Rss)。 我的代码基于 XML/ wordpress生成的WXR文件并像这样开始: 我是这样开始的: $newxml =
我想将所有页面重定向到 http://www.expample2.com除了 wp-admin 和 wp-json。 例如,用户能够登录 http://www.example1.com/wp-admi
我使用 MAMP 在本地构建了一个快速的 WordPress 网站,然后将其 checkin SVN 存储库。然后我将其检查到我的开发服务器上。 除了运行 search and replace too
在搜索端点的 WP REST API (wp json) 中: https://www.example.com/wp-json/wp/v2/search?search=searchPhrase&_em
我正在使用这个 NGINX 规则来强制 WordPress 网站的尾部斜杠: rewrite ^([^.]*[^/])$ $1/ permanent; 但是这个规则给 Gutenberg 和 wp-j
在搜索端点的 WP REST API (wp json) 中: https://www.example.com/wp-json/wp/v2/search?search=searchPhrase&_em
我正在使用这个 NGINX 规则来强制 WordPress 网站的尾部斜杠: rewrite ^([^.]*[^/])$ $1/ permanent; 但是这个规则给 Gutenberg 和 wp-j
我想限制所有用户访问 WordPress 网站登录。 例如:假设我有 WordPress 网站域 example1.com,我想限制所有用户使用 example1.com/wp- 访问管理员登录adm
尝试实现这里讨论的技术, http://z9.io/2013/10/21/shiny-new-dynamic-content-wp-super-cache/ 进入使用 Genesis 框架的站点。我想
我试图在位于我的 WP 主题文件夹内的 PHP 文件中调用自定义 AJAX 函数,但是我无法让它检索输出。我认为问题在于将 WP 查询链接到主 WP 文件? $.ajax({ url: "../../
我正在编写一个 perl 脚本,用于将 Wordpress 安装从一个地方迁移到另一个地方。在这项工作中,我需要使用 wp-cli 调用从 wp-config 文件中获取 wordpress 数据库名
我最近更改了我的 WordPress 网站上的目录。我导出了数据库,搜索并替换了旧 URL 为新 URL,然后重新导入。该网站的前端工作正常,但任何页面的后端都需要近 15 秒才能加载。 从funct
我使用下面的代码通过类似的单词标签获取帖子但不起作用 $query = " SELECT * FROM $wpdb->posts , $wpdb->terms
我已经通过 DirectAdmin 在我的服务器上安装了 SSL 证书。这似乎运作良好。 我已将 wp_*_options 表中的 url 更改为 https://mydomain.nl 等。突然我的
我正在建立一个网站,使用 wordpress+buddypress(最新版本)。 在这个网站中,我有自己的自定义登录|注册|重置密码表单,我不想将它们链接到后端 wp-forms。 我已经阻止了所有用
我是一名优秀的程序员,十分优秀!