首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RavenDB -引用属性

RavenDB -引用属性
EN

Stack Overflow用户
提问于 2012-01-04 02:47:50
回答 1查看 301关注 0票数 3

在我目前正在开发的一个应用程序中,我刚刚用RavenDB替换了db4o。我只是注意到一些不起作用的东西,做了一些研究,现在我需要一个理智的检查。

让我们假设这个域模型:

Person拥有姓名、地址和汽车属性。

Car具有Make、Model和Mileage属性。

使用RavenDB,我可以创建一辆汽车并保存它。然后,我可以创建一个Person并将一辆汽车分配给该Person的Car属性。当我救人的时候,车在人里面也被救了。看起来一切都很好。

问题出在我后来更新Car.Mileage的时候。Car在RavenDB中更新,但不在Person.Car中更新。Person.Car拥有老的里程数。

汽车是独立存在的。乔可以拥有这辆车,南希也可以。两个Person对象都有一个对Car的引用。

在RavenDB中,这应该如何处理?从我读到的关于聚合/根对象的所有内容来看,似乎我应该向Person添加一个CarId属性。那么我上人的时候,也是按ID手动上车的,对吗?或者,我是否可以将汽车属性嵌入Person中,并在Car.Mileage随时间变化时,以某种方式使所有Person对象显示正确的Person.Car.Mileage?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-07 07:50:36

如果我没理解错你的模型,你会生成2个这样的文档:

代码语言:javascript
复制
{// cars/1
  "Make": "Honda",
  "Model": "Civic",
  "Mileage": 250000
}

就像这样:

代码语言:javascript
复制
{// persons/1
  "Name": "John Doe",
  "Address": "...",
  "Car": {
    "Id": "cars/1",
    "Make": "Honda",
    "Model": "Civic",
    "Mileage": 250000
  }
}

在这个文档模型中,这一点很重要。所有汽车属性都在Person.Car属性中被反规范化。所以在您的代码中,当您对Car.Mileage进行更新并保存它时。您最终得到的2个文档如下所示:

代码语言:javascript
复制
{// cars/1
  "Make": "Honda",
  "Model": "Civic",
  "Mileage": 999999
}

就像这样:

代码语言:javascript
复制
{// persons/1
  "Name": "John Doe",
  "Address": "...",
  "Car": {
    "Id": "cars/1",
    "Make": "Honda",
    "Model": "Civic",
    "Mileage": 250000
  }
}

这正是你让瑞文做的。使用这个文档模型,为了确保两个文档是一致的,您需要像您一样更新Car对象和所有使用该汽车的人员的Person.Car.Mileage属性。

根据数据访问需求,您可以通过几种不同的方式修改模型。一种选择是让你的模型看起来像这样:

代码语言:javascript
复制
{// cars/1
  "Make": "Honda",
  "Model": "Civic",
  "Mileage": 250000
}

就像这样:

代码语言:javascript
复制
{// persons/1
  "Name": "John Doe",
  "Address": "...",
  "Car": "cars/1"
}

使用这个文档模型,您只需要更新Car.Mileage属性。如果选择此选项,还可以在单个网络请求中从Raven获取引用的文档。通过这样做:

代码语言:javascript
复制
var person = session.Include<Person>(x => x.Car).Load("persons/1");
var car = session.Load<Car>(person.Car);

但是,在如何更改文档模型以满足应用程序需求方面,这只是一种选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8717124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档