【问题标题】:How to store types like IPEndPoint with Entity Framework 6如何使用 Entity Framework 6 存储 IPEndPoint 等类型
【发布时间】:2015-06-07 10:38:38
【问题描述】:

我一直在寻找如何使用 Entity Framework 6 在数据库中存储像 IPEndPoint 这样的 CLR 类型。在我的特殊情况下,我有一个 IPEndPoint 子类添加了一些属性 (ExtendedIPEndPoint)。

通常它应该是一个常见的用例,但我真的找不到任何解释如何做到这一点。理论上它很简单,存储只需获取 IPAddress 属性并将其映射到字符串,然后获取 Port 属性并将其映射到整数。要加载 ExtendedIPEndPoint,只需使用构造函数和其他方法(如 IPAddress.Parse)创建一个新对象,以从存储的字符串中解析 IPAddress。

我听说过复杂类型、存储过程和代理,但我真的不知道如何使用它们,如果这些是要搜索的正确词,哪里有很好的解释。

【问题讨论】:

    标签: c# .net entity-framework store


    【解决方案1】:

    最终,您只需要存储构建您想要表示的类型所需的数据。

    由于IPEndPoint 有一个constructor、一个IPAddress 和一个int,因此您需要能够存储这些值。因此,由于 IPAddres 也不是 SQL 类型,因此我们也需要 constructor 的数据:

    public class MyClass
    {
        public byte[] IPAddressData { get; set; }
        public int Port { get; set; }
    
        private IPAddress _IPAddress;
        [NotMapped]
        public IPAddress IPAddress
        {
            get
            {
                if(_IPAddress == null) 
                    _IPAddress = new IPAddress(IPAddressData);
                return _IPAddress;
            }
        }
    
        private IPEndPoint _IPEndPoint 
        [NotMapped]
        public IPEndPoint IPEndPoint 
        {
            get
            {
                if(_IPEndPoint == null) 
                    _IPEndPoint = new IPEndPoint(IPAddress, Port);
                return _IPEndPoint;
            }
        }
    
    }
    

    【讨论】:

    • 我不会使用该构造函数...您将其限制为 IPv4(地址小于 0 或大于 0x00000000FFFFFFFF)。
    • 注意到了。我只是拿了我看到的第一个构造函数,我会研究另一个
    猜你喜欢
    • 2017-05-05
    • 2014-11-07
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多