相关疑难解决方法(0)

将对象反序列化为MongoDB C#Driver的接口

我正在开发一个使用MongoDB(带有C#驱动程序)和DDD的项目.

我有一个类(聚合),它具有一个类型是接口的属性.在另一个类中,我实现了这个接口.此类具有另一个属性,其类型是接口,并使用另一个实现的类进行设置.

下面的代码解释得更好:

// Interfaces
public interface IUser {
    Guid Id { get; set;}
    IPartner Partner{ get; set; }
}

public interface IPartner {
    IPhone Mobile { get; set; }
}

public interface IPhone {
    string number { get; set; }
}

// Implemented Classes
public class User: IUser {
    [BsonId(IdGenerator = typeof(GuidGenerator))]
    public Guid Id { get; set; }

    [BsonIgnoreIfNull]
    public IPartner Partner { get; set; }
}

public struct Partner : IPartner …
Run Code Online (Sandbox Code Playgroud)

c# mongodb mongodb-.net-driver

11
推荐指数
2
解决办法
8216
查看次数

MongoDB C# 驱动程序 - 将集合序列化为接口

由于工作中的环境限制,我正在 MongoDB 中实现一个粗略的事件源存储。我正在尝试从 Mongo 获取列表,IClientEvents如下所示:

 var events = await _db.GetCollection<IClientEvent>("ClientEvents").FindAsync(c => c.ClientId == clientId);
Run Code Online (Sandbox Code Playgroud)

当我运行上述存储库方法时,出现以下异常:

Message: System.InvalidOperationException : {document}.ClientId is not supported.
Run Code Online (Sandbox Code Playgroud)

接口IClientEvent定义为:

public interface IClientEvent
{
    Guid Id { get; set; }
    long TimeStamp { get; set; }
    Guid ClientId { get; set; }
}

public class ClientChangedEvent : IClientEvent
{
    public Guid Id { get; set; }
    public long TimeStamp { get; set; }
    public Guid ClientId { get; set; }

    public IEnumerable<Change> Changes; …
Run Code Online (Sandbox Code Playgroud)

c# interface mongodb event-sourcing mongodb-.net-driver

5
推荐指数
1
解决办法
1773
查看次数