1

我确定我在这里错过了明显的答案,但可以用手。我是 SubSonic 的新手并使用版本 3。我已经到了能够查询和插入的地步,但我坚持在插入后如何获取标识列的值。我看到另一篇提到 Linq 模板的帖子。我没有使用那些(至少我不认为我是......?)

TIA

... 更新 ...

所以我一直在调试我的代码,观察 SubSonic 代码是如何工作的,我发现了 indentity 列被忽略的地方。我使用 int 作为数据库中我的 ID 列的数据类型,并将它们设置为标识。由于 int 在 c# 中是不可为空的数据类型,因此通过执行 (key==null) 检查键列中是否存在值的 Add 方法 (public void Add(IDataProvider provider)) 中的逻辑测试可能是问题。获取标识字段新值的代码位于“真实路径”中,因为 int 不能为空,并且我使用 int 作为标识列数据类型,此测试永远不会通过。我的对象的 ID 字段中有一个我没有放在那里的 0。我假设它是在对象初始化期间设置的。我在这儿不准吗?是改变我在数据库中的数据类型的答案吗?

另一个问题(更多是好奇)。我注意到生成的类中的一些属性是用 ? 在数据类型之后。我不熟悉这个声明结构......给出了什么?有一些声明为 int(非关键字段),还有一些声明为 int?(关键领域)。这与他们在初始化时的处理方式有关吗?

任何帮助表示赞赏!

- 撞 -

4

3 回答 3

0

这对我有用,我使用完全相同的设置:

Account account = new Account();
account.EmailAddress = emailAddress;
account.Identity = identifier;
account.IsActive = true;
account.Save();

int accountId = account.AccountId; // AccountId being an identity column.

这个例子中没有错误处理,但你明白我的意思。

于 2010-06-01T13:45:50.600 回答
0

问题的第一部分对您没有多大帮助。可能您应该为此创建一个 T4 模板,如下所述:

如何获取与 SubSonic 3 LinqTemplate 插入关联的标识列值?

这 ”?” 您在 int 声明后发现指的是可空类型:

http://msdn.microsoft.com/en-en/library/1t3y8s4s(VS.80).aspx

它基本上意味着该属性可以为空。

于 2010-05-25T12:58:50.143 回答
0

除了我之前的回答;整数值不能为空。它是一个整数,因为数据库列是主键,因此根据定义它不应为空。不可为空的整数的默认值为0查看 C# 中的默认值

Mamoo 对可空类型的引用也值得参考。因此,您的单元测试应该针对 0 测试失败或大于 0 测试通过。

于 2010-06-07T10:34:18.480 回答