gpt4 book ai didi

subsonic - 在 SubSonic 3 中插入​​新的记录模式

转载 作者:行者123 更新时间:2023-12-04 07:10:42 27 4
gpt4 key购买 nike

我正在试用新的 SubSonic 3 预览版,但我不确定我应该在我的 MVC 项目中用于基本 CRUD 操作的模式。

我试图在我的模型中保留尽可能多的数据逻辑,所以我向每个模型的部分类添加了一些静态 CRUD 方法。

例如,假设我有一个配置表,它应该只有一条记录。所以,我的部分类可能看起来像这样:

public partial class Configuration{
// cut down; mocking hooks here IRL
private static IRepository<Configuration> Table = new MyRepository<Configuration>();

public static Configuration Retrieve()
{
var config = Table.GetAll().FirstOrDefault();
if (config == null)
{
config = new Configuration();
Table.Add(config);
}
return config;
}

public static void Update(Configuration target)
{
Table.Update(target);
}
}

目前,这不起作用,因为配置表具有主键的标识列,并且向表中添加新记录会引发标准的“无法为标识列插入显式值”错误。 SubSonic 3 似乎没有生成类,在新建它们时,它们与数据库模式的规则很好地配合(即,没有默认值,对于数据库中可以为空的值,没有可空的原语等)。

现在,我可以更改我的表和模式来解决这些问题,但我想知道什么时候我无法解决这个问题——什么时候我必须向数据库添加一条新记录并有一个身份作为我的主键。

我也想知道这种模式是否正确。 SubSonic 为您提供了许多不同的方式来处理您的存储库业务,所以我不确定我应该使用哪一种。我想尽可能多地使用我的模型(否则为什么不只是 Linq to Sql?),所以我不想在尝试对我的模型进行 CRUD 时使用 SubSonic 的查询构建优点。

我应该在这里做什么?任何关于在我的 MVC 项目中使用 SubSonic 3 的 CRUD 模式的建议都将受到欢迎和 +'d。也欢迎链接到涵盖 SubSonic 3 的此主题但在 Google 搜索中排名不高的网站...

直接询问 Rob ( link here )。至少对于我的数据库,生成的代码中有一个 showstopper 错误。啊啊,阿尔法软件。

更新

the release of Subsonic3 ,我们能不能有点颠簸重新考虑这个问题?

最佳答案

首先也是最重要的:t4 模板可供您根据需要使用 SS3 进行更改。这是使用 T4 的主要想法 - 我不想让你陷入我的愚蠢:)。

对于手头的问题 - 我认为这可能是我们模板中的一个错误,它拒绝将值粘贴到 PK 字段中:

    ISqlQuery BuildInsertQuery(T item) {
ITable tbl = _db.FindTable(typeof(T).Name);
Insert query = null;
if (tbl != null) {
var hashed = item.ToDictionary();
query = new Insert(_db.Provider).Into<T>(tbl); ;
foreach (string key in hashed.Keys) {
IColumn col = tbl.GetColumn(key);
if (!col.IsPrimaryKey) {
query.Value(key, hashed[key]);
}
}
}
return query;
}

在这里,我们的支票实际上应该是……
                if (!col.IsPrimaryKey && !col.AutoIncrement) {
query.Value(key, hashed[key]);
}

这样,非身份将被插入。但是在这里阅读您的问题时,在我看来,您并没有试图插入非身份。

您发送给我的电子邮件并没有提及 PK 作为身份的任何内容 - 您的 PK 是一种名为“NAme”的东西,它是一种字符串类型,而不是身份(自动增量)。

I'm wondering about when I cannot get around this issue--when I have to add a new record to the database and have an identity as my primary key.



这就是 SubSonic 假设的 - 您的 PK 是 IDENTITY 列。如果您只有一个 IDENTITY 列,我们无法帮助您,因为这是一个死锁表,您无法向其中插入任何值,因此您无法勾选 IDENTITY 列。此时您唯一的办法是 SET IDENTITY INSERT="off",这违背了目的。

希望这能回答你的问题?如果我没有得到它 - 你能为我做这个:
  • 一句话:什么不能做,什么错误
  • 你期待什么

  • 谢谢威尔,我希望我不会太胖。

    关于subsonic - 在 SubSonic 3 中插入​​新的记录模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404222/

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