我的问题似乎与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确实有一个值):
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.
导致此错误的原因可能是什么?
发布于 2011-10-16 12:17:19
事实证明,在这种情况下,错误消息是正确的。下面是我是如何发现错误的。希望它能在未来帮助其他人:
我的实体被插入时没有问题,实际上,错误消息是正确的。我怎么知道是怎么回事?我用下面的代码包装了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] 像我的收款方这样的Hmm....Ok...Looks正在正确插入,我甚至有了一个新的PayeeId。但是wait...Transaction呢?为什么会有事务尝试插入?
我是MVVM的新手。在过去的一个半月里,我一直在非工作时间使用它,所以我对最佳实践并不熟悉。在我的ViewModel上,我创建了一个名为account的公共实体。我使用此变量来跟踪应用程序中选定的帐户,以便到处显示正确的数据。在我试图从其中保存新收款人的页面中,当创建页面时,我创建了一个事务实体的实例,以将数据映射到屏幕上的控件,或者从屏幕上的控件映射数据。在我的OnNavigatedTo方法中,我所做的是设置
transaction.Account = App.ViewModel.account 因此,当我要保存事务时,我知道要将其保存到哪个帐户。实际上(我认为),这是在告诉我的数据上下文:嘿!我有一个事务实体,我正在通过向它添加一个帐户来更改它。因此,当我进入datacontext.SaveChanges方法时,它试图保存一个空的、空白的事务实体。
为什么这条线在OnNavigatedTo中排得很高?我没有把握。我将它移到了Save方法中,这是它的归属。
/doh
发布于 2011-11-14 04:58:47
在我的例子中,我试图插入一个未初始化的"System.DateTime“,而我的数据库字段不能为空。据我所知,从您的日志中,TransDate是System.DateTime.MinValue。即使是在可以为空的datetime上,它也会产生溢出错误。您必须将其设置为null,以便驱动程序将其转换为System.DBNull.Value。
https://stackoverflow.com/questions/7772877
复制相似问题