自定義類型

自定義類型允許定義復(fù)雜的數(shù)據(jù)結(jié)構(gòu),可以根據(jù)需要組織和處理數(shù)據(jù)。

復(fù)合類型

復(fù)合類型類似于表的行。你可以創(chuàng)建一個(gè)復(fù)合類型來包含多個(gè)字段:

CREATE TYPE person AS (
    id INTEGER,
    name TEXT,
    birthdate DATE
);

定義一個(gè)包含 id、namebirthdate 字段的自定義類型 person。

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    personal_info person
);

employees 表有一個(gè) personal_info 列,其數(shù)據(jù)類型是自定義的 person 類型。

INSERT INTO employees (personal_info) 
VALUES (ROW(1, 'John Doe', '1985-06-15'));
SELECT 
    (personal_info).id AS employee_id,
    (personal_info).name AS employee_name
FROM employees;
CREATE FUNCTION get_person_info(id INTEGER) 
RETURNS person AS $$
BEGIN
    RETURN QUERY SELECT id, name, birthdate FROM employees WHERE id = id;
END;
$$ LANGUAGE plpgsql;
SELECT * FROM get_person_info(1);

(如果是存的自定義類型,那么EFCore取數(shù)據(jù)的時(shí)候需要映射到具體類型)

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Birthdate { get; set; }
}

public class Employee
{
    public int Id { get; set; }
    public Person PersonalInfo { get; set; }
}

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>()
            .Property(e => e.PersonalInfo)
            .HasColumnType("person");
    }

** 枚舉類型**

枚舉類型用于定義一組預(yù)定義的值:

CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral');

這個(gè)枚舉類型 mood 允許的值是 'happy'、'sad''neutral'。

CREATE TABLE feedback (
    id SERIAL PRIMARY KEY,
    response mood
);

```sql
INSERT INTO feedback (response) VALUES ('happy');
SELECT * FROM feedback WHERE response = 'happy';

注意存和區(qū)的時(shí)候枚舉是當(dāng)成字符串處理的

public enum Mood
{
    Happy,
    Sad,
    Neutral
}
public class Feedback
{
    public int Id { get; set; }
    public Mood Response { get; set; }
}
 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Feedback>()
            .Property(f => f.Response)
            .HasConversion(
                v => v.ToString(), // 將枚舉值轉(zhuǎn)換為數(shù)據(jù)庫中的字符串
                v => (Mood)Enum.Parse(typeof(Mood), v)) // 從數(shù)據(jù)庫中的字符串轉(zhuǎn)換為枚舉值
            .HasColumnType("mood"); // 設(shè)置列的 PostgreSQL 類型為枚舉類型

        base.OnModelCreating(modelBuilder);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容