使用c#和mongodb建立一对多关系模型。

问题描述 投票:0回答:1

我有一个模型票据和一个模型任务。

public class Ticket
{
   [BsonId] public string _idTicket {get; set;}
   public List<Task> _tasks {get; set;}
}

public class Task
{
   [BsonId] public string _idTask {get; set;}
}

如何建立一对多的关系?是在Task模型中加入_idTicket,还是有一个方法可以让mongodb驱动自动完成。

c# .net mongodb one-to-many mongodb-.net-driver
1个回答
0
投票

你可以将模型嵌入到其他模型中,当这个模型被序列化时,它将成为根文档的一个子文档。以下面的C#类为例。

class Ticket
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
    public Task[] Tasks { get; set; }
}

class Task
{
    public string Name { get; set; }
}

当我们用C#把一些文档插入到MongoDB中时

var client = new MongoClient();
var database = client.GetDatabase("test");
var collection = database.GetCollection<Ticket>("tickets");

await collection.InsertOneAsync(new Ticket
{
    Name = "Ticket-1",
    Tasks = new[]
    {
        new Task{Name = "Task-A"},
        new Task{Name = "Task-B"},
    }
});

await collection.InsertOneAsync(new Ticket
{
    Name = "Ticket-2",
    Tasks = new[]
    {
        new Task{Name = "Task-C"},
        new Task{Name = "Task-D"},
        new Task{Name = "Task-E"},
    }
});

我们在MongoDB控制台中会看到它们的内容如下。

db.tickets.find().pretty()
{
        "_id" : ObjectId("5ed8f4d34602cb605c3f8d72"),
        "Name" : "Ticket-1",
        "Tasks" : [
                {
                        "Name" : "Task-A"
                },
                {
                        "Name" : "Task-B"
                }
        ]
}
{
        "_id" : ObjectId("5ed8f4d34602cb605c3f8d73"),
        "Name" : "Ticket-2",
        "Tasks" : [
                {
                        "Name" : "Task-C"
                },
                {
                        "Name" : "Task-D"
                },
                {
                        "Name" : "Task-E"
                }
        ]
}

如你所见,我们不需要在任务中使用外键 因为它已经属于它所属的票据。

© www.soinside.com 2019 - 2024. All rights reserved.