小编Ale*_*man的帖子

Code-First或Database-First,如何选择?

让我们假设我们将开始新项目 - 包含一些业务逻辑的应用程序,ASP.NET,WPF或两者的用户界面.我们想使用ORM或DAL代码生成器并在.NET类中实现我们的业务逻辑.我们可以通过几种基本方式表达我们对业务领域的看法:

  • 在.NET上实现业务类,让ORM生成适当的数据库模式
  • 手动创建数据库模式并通过代码生成器生成.NET类
  • 使用某种可视化设计器,可以生成业务类和数据库结构或脚本

您更喜欢写什么:"创建表人(...)"或"公共类人{...}"?
这些方式的优点和缺点是什么?
也许有一些特殊的情况,一种方式比另一种更好?
如何在特定项目中选择最佳方式?

我对"Code-First"(或"Model-First")方式非常熟悉,但似乎大多数ORM都设计为代码生成器或映射器,假设我将手动实现数据库结构和业务类.

基于expirience的答案和ORM的例子特别受欢迎.

编辑:注意,问题不是"在开始新项目时我应该先做什么?",但"应该手动声明/自动生成什么,域类或数据库结构?"

.net database orm

40
推荐指数
3
解决办法
6591
查看次数

如何输入任何内容时如何禁止验证

我使用WPF数据绑定实现IDataErrorInfo接口的实体.一般来说,我的代码如下所示:

商业实体:

public class Person : IDataErrorInfo 
{
  public string Name { get; set;}

  string IDataErrorInfo.this[string columnName]
  {
    if (columnName=="Name" && string.IsNullOrEmpty(Name))
      return "Name is not entered";
    return string.Empty;
  }  
}
Run Code Online (Sandbox Code Playgroud)

Xaml文件:

<TextBox Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=true}" />
Run Code Online (Sandbox Code Playgroud)

当用户点击"创建新人"后执行以下代码:

DataContext = new Person();
Run Code Online (Sandbox Code Playgroud)

问题是,当刚创建person时,其名称为空,WPF会立即绘制红框并显示错误消息.我希望它仅在名称已编辑且焦点丢失时显示错误.有人知道这样做的方法吗?

.net data-binding validation wpf

31
推荐指数
2
解决办法
7133
查看次数

长期交易是否可以接受?

我正在考虑以下列方式在2层WPF(或Windows窗体)应用程序中使用事务:

当我们打开新表格来编辑数据,在此交易中透明地编辑和保持更改时,我们可以开始新的交易.然后我们可以单击"确定"按钮并提交事务,或"取消"按钮并回滚它.如果我们想要打开另一个包含此数据的对话框窗口,我们可以使用嵌套事务.

问题是:这种使用交易的方式是否可以接受?我知道有很多不同的方法来实现这样的逻辑,但我想列出这个逻辑的优点和缺点.

database language-agnostic transactions data-access-layer

6
推荐指数
2
解决办法
2057
查看次数

为什么SynchronizationContext无法正常工作?

我有以下代码:

[TestMethod]
public void StartWorkInFirstThread()
{
    if (SynchronizationContext.Current == null)
        SynchronizationContext.SetSynchronizationContext(
            new SynchronizationContext());

    var syncContext = SynchronizationContext.Current;

    Console.WriteLine("Start work in the first thread ({0})", 
        Thread.CurrentThread.ManagedThreadId);

    var action = ((Action) DoSomethingInSecondThread);
    action.BeginInvoke(CallbackInSecondThread, syncContext);

    // Continue its own work
}

private static void DoSomethingInSecondThread()
{
    Console.WriteLine("Do something in the second thread ({0})", 
        Thread.CurrentThread.ManagedThreadId);   
}

private void CallbackInSecondThread(IAsyncResult ar)
{
    Console.WriteLine("Callback in the second thread ({0})", 
        Thread.CurrentThread.ManagedThreadId);
    var syncContext = (SynchronizationContext) ar.AsyncState;
    syncContext.Post(CallbackInFirstThread, null);
}

private void CallbackInFirstThread(object obj)
{
    Console.WriteLine("Callback in the …
Run Code Online (Sandbox Code Playgroud)

.net multithreading asynchronous synchronizationcontext

3
推荐指数
2
解决办法
5448
查看次数