gpt4 book ai didi

c# - SQLite:设计数据库并使用自动增量 ID 访问其数据的正确方法?

转载 作者:行者123 更新时间:2023-12-02 07:34:40 24 4
gpt4 key购买 nike

假设我有一个包含艺术家及其专辑的数据库。

CREATE TABLE Artist (
ArtistID INTEGER PRIMARY KEY,
ArtistName TEXT NOT NULL
);


CREATE TABLE Album(
AlbumName TEXT PRIMARY KEY,
ArtistID INTEGER REFERENCES Artist(ArtistID),
Year INTEGER
);

然后我在 Visual Studio 中创建一个应用程序,并使用 sqlite/sql server 紧凑工具箱将 SQLite 数据库连接到我的项目,然后我想使用 C# 管理数据库

我为我的用户创建一个应用程序。用户想要按艺术家姓名查找所有专辑。

如果我的主键是自动增量属性,我是否必须使用如下语法:

public static IQueryable<Artist> GetPossibleArtists(string name)
{
var matches = from match in dB.Artists where match.ArtistName == name select match;

return matches;
}

public static Artist GetFirstArtistIfExists(string artistName)
{
var artistMatches = GetPossibleArtists(artistName);

if (artistMatches.Count() == 0)
return null;
return artistMatches.First();
}

因此,我首先访问数据库,通过 ID 查找艺术家,因为我不能简单地通过艺术家姓名查找专辑,因为艺术家姓名不是主键,而且我无法搜索“专辑”表按艺术家姓名,我只能按艺术家ID搜索此表然后我终于可以通过艺术家的id找到所有专辑

public static IQueryable<Album> GetPossibleAlbums(long artistID)
{
var matches = from match in dB.Albums where
match.ArtistID == artistID
select match;

return matches;
}

问题是:1)我在这里做错了什么,有没有更好的方法来访问艺术家的所有专辑,这样我就不需要先访问数据库“通过名字查找艺术家的ID”,然后才能找到艺术家 ID 的所有专辑?2)我的数据库可能设计错误,有什么建议吗?3)将艺术家的名字存储在“专辑”表中是一个好主意吗?我需要如何做到这一点才能保持我的艺术家的自动增量主键同时存在?

最佳答案

您需要一个 JOIN 将专辑表与 ArtistID 字段上的艺术家表关联起来

var matches = from a in dB.Albums join b in db.Artists on a.ArtistID equals b.ArtistID
where b.ArtistName == artistName
select a;

join clause C# reference

关于c# - SQLite:设计数据库并使用自动增量 ID 访问其数据的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53456281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com