如何创建使用各种不同数据库实现的c#接口

本文关键字:数据库 实现 接口 何创建 创建 | 更新日期: 2023-09-27 18:15:56

我正在设计一个在web应用程序中使用的对象模型。

模型包含用户。每个用户都有会话。每个会话包含该会话的记录和事件。我需要做的是持久化数据(看起来像mongodb,或类似)我怎么能保持这个代码作为API到我的数据库,API的消费者将不需要知道它是如何存储的。它会"神奇地"一样工作。

谢谢!

这是我现在使用的设计。

public class User
    {
        public int id {get; set;}
        public DateTime EnrollDate { get; set; }
        public string Udid { get; set; }
        public string Email { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public HashSet<Session> Sessions { get; set; }
        public HashSet<Session> GetSessions()
        {
            if (Sessions == null)
            {
                Sessions = new HashSet<Session>();
            }
            return Sessions;
        } 
    }
public class Session
    {
        public string SessionId { get; set; }
        public DateTime Time { get; set; }
        public JObject Parameters { get; set; }
        private List<Event> Events { get; set; } 
        private List<Record> Records { get; set; }
        public List<Event> GetEvents()
        {
            if (Events == null)
            {
                Events = new List<Event>();
            }
            return Events;
        }
        public List<Record> GetRecords()
        {
            if (Records == null)
            {
                Records = new List<Record>();
            }
            return Records;
        }
    }
 public class Record
    {
        public Record()
        {
            RecordId = Guid.NewGuid().ToString();
            CreatedAt = DateTime.Now;
        }
        public string Name { get; set; }
        public string RecordId { get; set; }
        public DateTime CreatedAt { get; set; }
        public DateTime Time { get; set; }
        public JObject Data { get; set; }
    }
 public class Event
    {
        public Event()
        {
            EventId = Guid.NewGuid().ToString();
            CreatedAt = DateTime.Now;
        }
        public string EventId { get; set; }
        public string Name { get; set; }
        public DateTime Time { get; set; }
        private DateTime CreatedAt { get; set; }
        public JObject Parameters { get; set; }
    }

如何创建使用各种不同数据库实现的c#接口

我建议您仔细阅读存储库模式。它允许您在编写代码时不必事先考虑数据访问的具体实现。

我会将这些接口构建到他们自己的程序集中,以及一个存储库接口,该接口定义了使用上面定义的接口从数据存储检索数据的契约。

你的应用程序将使用纯粹的接口定义进行数据访问,你可以使用Unity或类似的工具注入你的存储库和数据对象的具体实现。

这也将有助于单元测试你的代码,因为你可以注入一个测试存储库来测试业务对象,例如