c# - 具有多个允许值类型的数据库字段

标签 c# postgresql nhibernate fluent-nhibernate domain-driven-design

我在我的 ASP.NET MVC 应用程序中使用 Fluent NHibernate 来检索数据并将数据保存到 Postgresql 数据库。

假设你有一张 table

Fields {Name, DataType, Value}

//Model
public class Table {

    public virtual string Name { get; set;}

    public virtual string DataType { get; set;}

    public virtual string Value { get; set;}
}

所以典型的记录可能是:

Record { "Firstname", "Varchar", "Bob" }
Record { "DateOfBirth", "Timestamp", "2003-04-12 04:05:06" } 

因此,为了使其全部正常工作,值需要是 Varchar 类型。

有更好的方法吗?我不喜欢 Value 是类型 string/Varchar 的想法。

我希望值类型是 object 或其他类型。我试过这个但是从 Fluent NHibernate 得到了一个Exception

您将如何从 DDD 的角度解决这个问题?

最佳答案

您可以使用 json(如果您的 postgres 版本支持,则可以使用 jsonb)。

在这种情况下我不会那样做。为了充分利用索引和数据搜索,最好提出一种结构,将不同的数据类型保存在不同的字段中,以便可以高效地对它们进行排序和搜索。

一个例子:

create table obj as (obj_id serial,
                     name varchar,
                     vc_data varchar,
                     ts_data timestamp,
                     intdata integer
                     datatype varchar);

如有必要,您可以在所有字段上创建索引,甚至可以创建 View 您的一些代码更简单(当不按数据类型搜索或排序时)

create view obj_view as
  (select obj_id,
   name,
   coalesce(vc_data, ts_data, int_data) data
   from obj)

关于c# - 具有多个允许值类型的数据库字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28932471/

相关文章:

nhibernate - 使用 nant xmlpoke 更改 nhibernate 配置

c# - C# .net 中的文件处理

c# - 使用c#提取excel中嵌入的 ‘pdf’文件并将其保存到文件夹中

postgresql - 测量 postgresql 中的复制滞后

sql - 将列从 varchar 更改为整数并删除非数字字符

NHibernate:延迟加载单个属性

NHibernate二级缓存性能问题

c# - UWP 推送通知

c# - 这是简化继承类的有效方法吗?

sql - 在 Postgresql 中查找模式