当我的项目运行时,无效方法不会自动运行

时间:2019-02-17 10:30:09

标签: c# sql sql-server devexpress xaf

我想在我的项目运行时自动运行我的void方法,但事实并非如此。我试过了,但我认为这不是好方法。有什么其他方式或如何初始化我的void方法。

string fAccount;
[Key]
[Size(150)]
public string Account
{
    get { GroupedAccount(); return fAccount; }
    set { SetPropertyValue<string>(nameof(Account), ref fAccount, value); }
}
private void GroupedAccount()
        {
            SqlConnection conn = new SqlConnection("Connection");
            SqlCommand cmd = new SqlCommand("SELECT * FROM Traders", conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
    conn.Open();
        var groupedData = from b in dt.AsEnumerable()
                          group b by b.Field<string>("Account Name") into g
                          select new
                          {
                              fAccounts = g.Key,
                          };

        foreach (var r in groupedData)
        {
            SqlCommand cmd2 = new SqlCommand("INSERT INTO dbo.TradersAccount (Account) VALUES (@Account)", conn);
            cmd2.Parameters.AddWithValue("@Account", r.fAccounts);
            cmd2.ExecuteNonQuery();
        }
        conn.Close();
        }

1 个答案:

答案 0 :(得分:1)

在XAF应用程序中,您有多个放置启动代码的地方,但是对于您而言,您似乎正在尝试根据一些现有数据初始化数据库中的某些对象。推荐的位置是 Updater.cs 文件中的ModuleUpdater。有关更多信息,请参见文档:

您的Account属性是XPO对象的一部分。 XPO是一个对象关系映射器,也就是说,它抽象了将C#类传输到SQL存储的复杂性。通常,您应该避免在持久属性的获取器和设置器中放置 any 附加代码。 DevExpress文档很好:

尤其是,XPO旨在消除对直接SQL的需求。如果每次修改TradersAccount对象时都需要创建或更新Trader对象,则通常可以创建一个TraderAccount XPO对象并定义一个association property并使用new TraderAccount(Session)并将其添加到关联属性集合。然后XPO将自动为您生成所有相应的SQL。