Tag: 持久性

更新和持久化数据集问题

我想我错过了…… 这里很简单:我想更新一个数据集并将其推回到它来自的数据库,但我一直得到一个: 并发冲突:UpdateCommand影响了预期的1条记录中的0条。 这是产生此错误的一些代码: public static void UpdateNorthWindWithDataset() { string connString = @”Data Source=localhost;Initial Catalog=NorthWind;Integrated Security=SSPI;”; using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); // Declaring a DataAdapter and initiating it with a Select and updateCommand SqlDataAdapter da = new SqlDataAdapter(); SqlCommand selectCmd = new SqlCommand(“SELECT CustomerId, City, Region ” + “FROM Customers” , conn […]

如何在c#中赋值后保留有关对象的信息?

我一直在问我认为可能是什么解决方案的问题 ,但有人指出我陷入了XY问题,我应该问一下我的确切问题。 我有一个结构,我希望其他人能够在他们自己的程序中使用。 它需要可以从其他现有类型隐式转换为此类型,但同时在分配后需要保留一些信息。 这是一个简单的问题示例: using System; public struct MyStruct { public string SomethingImportant; public MyStruct(string s) { SomethingImportant = s; } //this function needs to have no knowledge of how/where the struct is being used public bool SomeFunction(string s) { return s == SomethingImportant; } public static implicit operator MyStruct(double x) { return new […]

如何在C#中覆盖反序列化

我有一个课程,随着时间的推移会经历一些版本的变化。 作为我的应用程序启动的一部分,来自此类内部的数据被序列化和反序列化。 我遇到的问题是,如果我通过添加更多属性来更新类,然后启动应用程序,旧数据将无法正确加载。 我想要做的是覆盖反序列化步骤,我不介意从xml手动重建对象,因为我有一个版本号存储,可以用它来递归更新对象的版本。 是否有我可以实现的接口,或者我可以在某处设置的属性,以便能够执行此操作? 如果你想不出办法做我想做的事,那还有其他选择吗? 例如我正在加载的xml版本中可能不存在的属性的默认值。

是否有java.util.Properties类的C#模拟

Java有一个很好的类,它可以保存基本的配置信息,例如你希望从一个会话到下一个会话持久化的gui设置。 我记得它保存并检索键值对,并且使用起来非常简单。 我一直在寻找C#的类比,但没有成功。 我错过了吗? 如果没有,那么除了保存/读取custrom文本文件以保存简单的应用程序设置之外,还有什么吗? (“超越”的衡量标准是简单)。

entity framework不保存/停止正在重建的数据库

我正在使用http://msdn.microsoft.com/en-us/data/jj591506上的教程自学有关entity framework。 我正在使用下面的代码。 using (var db = new DatabaseEntities()) { var section = new Section { SectionID = 1, SectionName = “Bob” }; db.Sections.Add(section); db.SaveChanges(); } 由于某种原因,此代码不写入我的数据库。 没有错误被抛出。 你有什么想法我可以看到或可能是什么原因? 这是上面链接的MSDN页面上的示例给出的几乎完全相同的副本。 这个问题看起来非常类似于这个问题: entity framework实际上没有保存更改,不幸的是,回答这个问题的人没有解释他们如何解决问题。 他们解释说他们检查了SQL转到数据库,经过一番调查后发现他们在项目中有一个数据库的副本,当它重建时,它在输出中被覆盖了,这很好。 。 我的问题是我不知道如何阻止这种情况发生。 你能帮我吗? 我也看过: entity framework保存上下文 entity framework:附加实体不保存 来自Google的很多页面。

具有持久性无知对象的持久性和域事件

我一直在研究域驱动设计和域事件 。 我非常喜欢这些事件提供的关注点的分离。 我遇到了持久化域对象和提升域事件的问题。 我想在域对象中引发事件,但我希望它们是持久性无知的。 我用这个Checkout方法创建了一个基本的ShoppingCartService : public void Checkout(IEnumerable cart, Customer customer) { var order = new Order(cart, customer); _orderRepositorty.Add(order); _unitOfWork.Commit(); } 在此示例中, Order的构造函数将引发OrderCreated事件,该事件可由某些处理程序处理。 但是,我不希望在实体尚未持久化或以某种方式持久化失败时引发这些事件。 为了解决这个问题,我想出了几个解决方案: 1.提升服务中的事件: 我可以在服务中引发事件,而不是在域对象中引发事件。 在这种情况下, Checkout方法将引发OrderCreated事件。 这种方法的一个缺点是,通过查看Order域对象,不清楚哪些事件是由哪些方法引发的。 此外,开发人员必须记住在其他地方创建订单时提出事件。 感觉不对劲。 2.队列域事件 另一种选择是对域事件进行排队,并在持久成功时引发它们。 这可以通过using语句来实现,例如: using (DomainEvents.QueueEvents()) { var order = new Order(cart, customer); _orderRepositorty.Add(order); _unitOfWork.Commit(); } QueueEvents方法会将布尔值设置为true ,而DomainEvents.Raise方法会将事件排队,而不是直接执行它。 在QueueEvent的dispose回调中,执行排队事件,确保已经发生了持久化。 这似乎相当棘手,它需要服务知道域对象中引发了哪个事件。 在我提供的示例中,它也只支持一种类型的事件,但是,这可以解决。 3.坚持域名活动 […]

WinForms – 这是保存一些数据最简单的方法吗?

刚刚构建我的第一个WinForms应用程序。 问题 – 在使用应用程序之间保存一些数据的最简单/最好的方法是什么(例如,在这种情况下,URL的状态和日期/时间列表)? 我认为不需要数据库。 例如*只是最简单地存储到文本文件? *或者像在DotNet中一样容易存储到XML文件* Windows注册表怎么样?这通常是要避免的吗? 它是否适用于包括Windows 7 *数据库在内的所有版本 – 在这里可能过度使用*也许是一个广泛使用的库? 谢谢

unit testing数据访问层的方法

我一直试图寻找一种有效的方法来在C#中对我的数据访问层进行unit testing。 我是主要的Java开发人员,并且只使用了C#大约6个月,过去我使用了一个名为DBUnit的库来测试已知的状态数据库。 我无法找到一个可以使用的类似活动库,最近似乎是nDBUnit但它现在已经有一段时间没有活动了。 关于C#中的方式和原因似乎存在很多相互矛盾的方法。 理想情况下,我想使用模拟测试数据访问层,而无需连接到数据库,然后在一组单独的测试中对存储过程进行unit testing。 在我正在研究的系统中,数据访问层是使用ADO.net(不使用entity framework)在SQL Server上调用存储过程。 以下是我必须使用的示例代码; 沿着模拟路径,我必须能够模拟SqlCommand(使用IDbCommand)和/或模拟SqlConnection。 所以我的问题是什么似乎是最好的方式(如果有这样的事情)这样做? 到目前为止,唯一的方法是使代理对象传递给构造函数,以便它可以返回模拟的Sql *对象进行测试。 我还没有机会查看所有可用的C#模拟库。 public class CustomerRepository : ICustomerRepository { private string connectionString; public CustomerRepository (string connectionString) { this.connectionString = connectionString; } public int Create(Customer customer) { SqlParameter paramOutId = new SqlParameter(“@out_id”, SqlDbType.Int); paramOutId.Direction = ParameterDirection.Output; List sqlParams = new List() { paramOutId, […]

C#:如何使表单记住其Bounds和WindowState(考虑双显示器设置)

我创建了一个表可以inheritance的类,它处理表单位置,大小和状态。 而且效果很好。 除了一件事: 当您在与主要屏幕不同的屏幕上最大化应用程序时,位置和大小(在最大化之前)被正确存储,但是当它最大化时(根据其先前的状态),它在我的主监视器上最大化。 当我将其恢复到正常状态时,它会转到之前的其他屏幕。 当我再次最大化它时,它当然会在正确的屏幕上最大化。 所以我的问题是……我怎样才能制作一个表格,当它最大化时,记住它最大化的屏幕是什么? 当表单再次打开时,如何恢复? 一种完整的问题解决方案 我接受了一个答案,该答案对如何在屏幕上有一个非常好的提示。 但这只是我问题的一部分,所以这是我的解决方案: 负载 首先从任何存储中获取存储的Bounds和WindowState 。 然后设置Bounds 。 通过Screen.AllScreens.Any(ø => ø.Bounds.IntersectsWith(Bounds))或MdiParent.Controls.OfType().First().ClientRectangle.IntersectsWith(Bounds)确保Bounds可见。 如果没有,只需做Location = new Point(); 。 然后设置窗口状态。 关闭时 存储WindowState 。 如果WindowState是FormWindowState.Normal ,则存储Bounds ,否则存储RestoreBounds 。 这就是它! =) 一些示例代码 因此,正如Oliver所建议的,这里有一些代码。 它需要充实,但这可以作为任何想要的人的开始: PersistentFormHandler 负责在某处存储和获取数据。 public sealed class PersistentFormHandler { /// The form identifier in storage. public string Name { get; […]

在.NET中存储数据的方法

我正在寻找在.NET中的Windows窗体应用程序中存储数据的方法。 我想使系统的输入数据持久化,因此当我关闭程序并再次打开它时,将检索数据。 除了创建链接数据库之外,还存在哪些方法? 很高兴赞赏这些例子。