所以,我有一个DataGridView使用BindingList作为数据源
DataGridView.DataSource = new BindingList<Car>{...}
Run Code Online (Sandbox Code Playgroud)
哪里
public class Car
{
public ColorName Color { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
同
public class ColorName
{
public int Id {get; set;}
public string Name{get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我使用Combobox专栏:
DataGridViewComboBoxColumn colorNameDataGridViewTextBoxColumn;
colorNameDataGridViewTextBoxColumn.DataPropertyName = "Color";
colorNameDataGridViewTextBoxColumn.HeaderText = "Color";
colorNameDataGridViewTextBoxColumn.Name = "Color";
colorNameDataGridViewTextBoxColumn.DisplayMember = "Name";
colorNameDataGridViewTextBoxColumn.ValueMember = "Id";
colorNameDataGridViewTextBoxColumn.DataSource = new ColorName[] {...};
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它发挥作用?!现在我得到一个例外,因为我认为它试图将Id转换为ColorName.
我尝试使用空的ValueMember或向ColorName类添加直接强制转换操作符但无法使其工作.
当然我可以在Car类中使用int来表示颜色,但不是很好.
正如您可能猜到的那些类实际上是Castle Project ActiveRecord-s.
欢迎任何想法!
我有一个关于城堡AR中的关系的以下映射
[BelongsTo("EVENT_ID", Lazy = FetchWhen.OnInvoke)]
public EventType PayEvent
{
get
{
return m_PayEvent;
}
set
{
m_PayEvent = value;
}
}
Run Code Online (Sandbox Code Playgroud)
但即使没有调用属性,也会获取Relation.这里有什么遗漏?我也在使用SessionScope.
我在SqlNamedQuery属性中遇到了一些问题,该属性已添加到Castle的ActiveRecord的较新版本中。我已经这样指定了:
[assembly: SqlNamedQuery(Queries.GetItemName, "EXEC [dbo].[GetItemName] :id")]
Run Code Online (Sandbox Code Playgroud)
除此之外,我在结果映射中有一个属性声明为:
...
[Property(Access = PropertyAccess.AutomaticProperty, NotNull = true)]
public virtual bool IsPrimaryName { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
Nhibernate查询:
IQuery query = Session.GetNamedQuery(Queries.GetItemName);
query.SetParameter("id", 1212, NHibernateUtil.Int64);
query.SetResultTransformer(Transformers.AliasToBean<Mapping>());
Run Code Online (Sandbox Code Playgroud)
执行后,我收到以下异常:
Object of type 'System.Int32' cannot be converted to type 'System.Boolean'.
Run Code Online (Sandbox Code Playgroud)
我还添加了以下web.config条目,但没有成功(可能仅适用于hql查询)。
<add key="query.substitutions" value="true 1, false 0, yes 'Y', no 'N'" />
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是-我该如何解决这个问题?存储过程返回0或1,但我也尝试过使用“ 1”,“ true”,“ TRUE”等。如何解决此问题?或者,也许我应该删除SqlNamedQueries?
更新:堆栈跟踪
[ArgumentException: Object of type 'System.Int32' cannot be converted to type 'System.Boolean'.]
System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) +4070954 …
Run Code Online (Sandbox Code Playgroud) 是否可以在ActiveRecord类上具有基本类型(如String)的HasMany关系,而无需创建另一个实体(如(TodoListItem))来保存该值.
[ActiveRecord]
public class TodoList
{
[PrimaryKey]
public int Id
{
get { return _id; }
set { _id = value; }
}
[HasMany(typeof(string)]
public IList<string> Items
{
get { return _items; }
set { _items= value; }
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
Castle ActiveRecord是否支持nHibernate支持的SQL公式?
例如,在nHibernate中,我们可以做这样的事情.
<property name="CountOfPosts"
formula="(select count(*) from Posts where Posts.Id = Id)"/>
Run Code Online (Sandbox Code Playgroud)
Castle Active Record是否支持此功能?
我有一个外部更新的实体(使用触发器,存储过程).这意味着实体可以在我不知道的情况下在同一个会话中进行更改,并且我需要始终执行数据库命中,并且从不使用第一级缓存中的实体.
这可能是使用NHibernate(或实际上,Castle ActiveRecord)吗?
我如何构建Castle.Core,Castle.ActiveRecord和NHibernate以允许部分信任?网上有大量的资源显示如何做到这一点,但是我找到的每个网站都说nant build -D:assembly.allow-partially-trusted-callers=true
用来构建每个程序集.当我在这里查看Castle.Core 主干时,没有*.build文件.
如何实现这一目标?我使用的是.NET 3.5.这不是Web应用程序.
编辑:我们正在使用NHibernate 2.1.2GA(我相信最新的稳定版本).下面给出的说明的问题是它们看起来像是指从trunk创建Castle.Core和Castle.ActiveRecord.Trunk似乎要求NHibernate 3.0.0与我们的版本不匹配.
几乎所有的调整都是在项目属性下的Security选项卡中完成的.
此外,由于应用程序和SQL Server驻留在不同的域下,我必须设置我的连接字符串以包括数据库服务器域.所以我的原始连接字符串数据源必须从"Data Source = DB_SERVER"转到"Data Source = DB_SERVER.DOMAIN".
最后,我必须设置requirePermission="false"
所有配置部分.我的configSections
结果是这样的:
<configSections>
<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" requirePermission="false"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" requirePermission="false"/>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
<section name="hibernate-configuration" requirePermission="false" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
</configSections>
Run Code Online (Sandbox Code Playgroud)
完成所有操作后,我成功地将该应用程序发布到来自不同域的文件共享上,并让用户安装应用程序时没有任何问题.将这些步骤应用于我们的其他应用程序并使用我们新编译的程序集也像魅力一样.
使用您不希望以明文形式存储在数据库中的密码的正确方法是什么?我在NHibernate/Castle ActiveRecord中有哪些选择?
更新: 我对其他人如何处理NHibernate/Castle ActiveRecord感兴趣.如果NHibernate或Castle ActiveRecord中有任何内置功能.
使用Castle Active Record而不是直接使用nHibernate在性能方面的开销是多少?它重要还是无关紧要?
我目前正在调查ASP.NET MVC Web应用程序,据报道该应用程序在负载下性能较差.(但是加载只是每秒几个请求).
我们使用MySQL + NHibernate + Castle ActiveRecord进行映射.NHibernate会话在每个会话开始时打开,并在视图中保持打开状态.
我已经优化了数据访问模式,以避免在可能的情况下选择N + 1问题.
现在我正在考虑的是..在每个请求上打开一个数据库事务并在最后提交.在99%的请求(MVC操作)中,不必将数据写入数据库.
nhibernate ×8
.net ×2
c# ×1
castle ×1
collections ×1
datagridview ×1
lazy-loading ×1
performance ×1
sql-server ×1
winforms ×1