我想知道什么用引用建模的最佳实践将下给定的情况。 我使用MongoRepository库。
public class User : Entity
{
publis string Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public class Post : Entity
{
public string Id { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public DateTime Added { get; set; }
public User Owner { get; set; }
}
当存储后我想仅所有者(用户)对象,而不是整个对象底层参考。
目前我正在做这样的,不知道的更好的办法?
var post = new Post
{
Title = "Example title",
Summary = "asd asd",
Added = DateTime.Now,
Owner = new User { Id = "someExistingUserId" }
};
postRepository.Update(post); //Save
..
//Then to get the post
var post = postRepository.GetById("previouslySavedPostId");
post.Owner = userRepository.GetById(post.Owner.Id);
return post;
userRepository和postRepository是MongoRepository类型。
这是正确的做法,以使用MongoDB的用C#解决我的问题/ MVC(4)?
您可以使用DBREF对象,而不是用户对象。
public class Post : Entity
{
public string Id { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public DateTime Added { get; set; }
public DBRef Owner { get; set; }
}
然后你可以:
var mongo = new Mongo(config.BuildConfiguration());
mongo.Connect();
var DB = mongo.GetDatabase(_dataBaseName)
var post = new Post();
post.Owner = new DBRef("User", userId); //First parameter is a mongoDB collection name and second is object id
//To fetch object referenced by DBRef you should do following
var owner = DB.FollowReference<User>(post.Owner);
蒙戈是文档数据库,如果你习惯使用的SQL Server它需要的思维方式略有不同。
当你不想在每一个岗位的用户密码的细节,这样我可能会做它是创建一个新的类,包括可能需要显示后的任何用户信息。
public class PostOwnerInfo
{
public string UserId { get; set; }
public string Name { get; set; }
}
更新你的帖子的实体,与OwnerInfo属性替代型PostOwnerInfo的所有者财产。
然后,当你创建一个新的岗位,做到以下几点。
var user = userRepository.GetById(someExistingUserId);
var post = new Post
{
Title = "Example title",
Summary = "Example summary",
Added = DateTime.Now,
OwnerInfo = new PostOwnerInfo
{
UserId = user.Id,
Name = user.Name
}
};
postRepository.Update(post);
这样,当你查询后,将有你需要显示后,在它的OwnerInfo不需要进一步查询属性中的所有用户信息。
var post = postRepository.GetById(previouslySavedPostId);
// post.OwnerInfo will contain user info
有数据冗余一定量的,但在一个数据库文件,这是我应该怎样做。
如果您需要任何理由完整的用户信息只是为它做一个单独的查询,你做之前。
这个想法是,你把你需要的职位的子文件后的所有用户信息,所以你不应该需要为用户做一个单独的查询。
如果用户数据chages,只需更新由用户进行的所有帖子用户信息领域。
您的用户数据将很少改变,但你会经常查询的帖子。