我的问题似乎与this帖子和this帖子相同,但似乎都不适用于我的情况。
我有一个实体定义如下(修改为仅显示列和定义):
public partial class Payee
{
[Column(Storage = "_PayeeId", IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false)]
public int PayeeId { get; set; }
[Column(Storage = "_PayeeName", DbType = "NVarChar(20)", CanBeNull = false)]
public string PayeeName { get; set; }
[Column(Storage = "_Active")]
public System.Nullable<bool> Active
[Column(IsVersion = true)]
private Binary _version;
[Association(Storage = "_Transactions", ThisKey = "PayeeId", OtherKey = "PayeeId")]
public EntitySet<Transaction> Transactions { get; set; }
}
从App.xaml.cs
开始,应用程序最初启动时,我会将一些示例数据加载到数据库中:
Payee pay1 = new Payee { PayeeName = "My Bank" };
App.ViewModel.SavePayee(pay1);
SavePayee
方法如下:
public void SavePayee(Payee payee)
{
Datacontext.Payees.InsertOnSubmit(payee);
Datacontext.SubmitChanges();
}
当我从App.xaml.cs
调用'样本数据'时,这可以正常工作。现在,当我尝试在应用程序中创建一个新的收款人时(txtPayee.Text DOES有一个值):
Payee payee = txtPayee.SelectedItem as Payee;
if (payee == null)
{
payee = new Payee { PayeeName = txtPayee.Text };
App.ViewModel.SavePayee(payee);
}
我收到错误:An overflow occurred while converting to datetime.
可能导致此错误的原因是什么?
答案 0 :(得分:1)
事实证明,在这种情况下,错误消息是SPOT ON。这是我发现错误的方式。希望它能在未来帮助其他人:
我的实体插入没有问题,实际上,错误消息是正确的。我怎么弄清楚发生了什么?我用以下代码包装了我的save方法的内容:
System.IO.IsolatedStorage.IsolatedStorageFile iso = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
using (checkbookDB.Log = new System.IO.StreamWriter(iso.CreateFile("log.txt")))
{
}
因此,当该方法发生错误时,它会将结果写出到文本文件中。收到错误消息后,我使用WP7 SDK附带的IsolatedStorageExplorerTool从模拟器下载了该文件。我在文本文件中找到了什么?
-- CURSOR BASED INSERT [Payees]
-- [PayeeName] <= [test payee]
-- [Active] <= []
-- AUTOSYNC [_version] <= [System.Byte[]]
-- AUTOSYNC [PayeeId] <= [13]
-- CURSOR BASED INSERT [Transactions]
-- [TransDate] <= [1/1/0001 12:00:00 AM]
-- [TransAmount] <= [0]
-- [TransType] <= [0]
-- [RefNum] <= []
-- [Memo] <= []
-- [PayeeId] <= [0]
-- [CategoryId] <= []
-- [AccountId] <= [1]
-- [Cleared] <= [False]
嗯....好的......看起来我的收款人插入正常,我甚至有一个新的PayeeId。但等等......交易?为什么要尝试插入交易?
Welp:我是MVVM的小伙子。在过去的一个半月里,我一直在非工作时间工作,所以我不熟悉最佳实践。在我的ViewModel上,我创建了一个名为account的公共实体。我使用此变量来跟踪应用程序中的所选帐户,以便在整个地方显示正确的数据。在我的页面中,我试图保存新的收款人,在创建页面时,我创建了一个Transaction实体的实例,用于将数据映射到屏幕上的控件或从控件上映射数据。那么我在OnNavigatedTo方法中做的是设置
transaction.Account = App.ViewModel.account
因此,当我去保存交易时,我知道要将其保存到哪个帐户。嗯,这是真正做的(我想),告诉我的datacontext嘿!我通过向其添加帐户来更改此事务实体。因此,当我输入datacontext.SaveChanges方法时,它会尝试保存一个空的BLANK事务实体。
为什么这条线在OnNavigatedTo上升?我不确定。我将其移动到它所属的Save方法。
/ DOH
答案 1 :(得分:0)
在我的情况下,我试图插入一个未初始化的“System.DateTime”,我的数据库字段不可为空。 据我所知,TransDate是System.DateTime.MinValue。即使在可以为空的日期时间,它也会产生溢出错误。您必须将其设置为null,以便驱动程序将其转换为System.DBNull.Value。