我正在解析电子邮件并使用ORM将它们插入数据库(确切地说是NHibernate).虽然我目前的方法在技术上有效,但我不是很喜欢它,但不能提供更好的解决方案.该电子邮件包含50个字段,并从第三方发送,看起来像这样(显然是一个非常短的虚拟样本).
Field #1: Value 1 Field #2: Value 2
Field #3: Value 3 Field #4: Value 4 Field #5: Value 5
Run Code Online (Sandbox Code Playgroud)
我的问题是,通过解析这么多字段,数据库表是一个绝对的怪物.我无法使用任何种类的关系创建适当的模型AFAIK,因为发送的每封电子邮件都是静态数据,并且不依赖于任何其他来源.
我唯一的想法是找到每个字段之间的共性,并将它们分成更易于管理的块.每个实体说10~字段,总共5个实体.然而,我并非非常喜欢这个想法,因为我所做的就是建立一对一的关系.
管理大量不受控制的房产的好方法是什么?
有什么想法吗?
如何减少最深TreeViewItem节点的左缩进?出于某种原因,除了最深的节点之外,WPF似乎都会增加这种缩进.查看Window XP的树视图实现,每个深度具有相同的左边距.
我一直在搜索,我似乎无法找到一个有效的实现,但它似乎是可能的.
我有一个TreeView必然的ObservableCollection<T>.每次最终用户修改其过滤器时,都会修改该集合.当用户修改他们的过滤器时,会调用数据库(需要1-2ms顶部),并且返回的数据将被解析以创建层次结构.我也有一些XAML确保每个都TreeViewItem被扩展,这似乎是问题的一部分.请记住,我只修改了200个最大节点深度为3的对象.我希望这是即时的.
问题是每当过滤器被修改并且TreeView层次结构发生变化时,UI会挂起约1秒钟.
这是负责创建TreeView层次结构的XAML .
<TreeView VerticalAlignment="Top" ItemsSource="{Binding Hierarchy}" Width="240"
ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.Row="1">
<TreeView.ItemTemplate>
<!-- Hierarchy template -->
<HierarchicalDataTemplate ItemsSource="{Binding Stations}">
<TextBlock Text="{Binding}" />
<!-- Station template -->
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Locates}">
<TextBlock Text="{Binding Name}" />
<!-- Locate template -->
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding TicketNo}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
这是更新列表的代码.
public ObservableCollection<HierarchyViewModel> Hierarchy
{
get { return _hierarchy; }
set { _hierarchy = value; }
} …Run Code Online (Sandbox Code Playgroud) 我正在寻找类似的效果---- or ----.但是,下面的代码创建了一个通过效果.我认为这个设置Grid.ZIndex可以解决问题,但它似乎没有做任何事情.
<Grid>
<TextBlock Text="or" FontSize="22" Height="34" Grid.ZIndex="2" HorizontalAlignment="Center" />
<Line Stretch="Fill" Stroke="Black" X1="1" Margin="0 4 0 -1" SnapsToDevicePixels="True" Grid.ZIndex="1" Height="34" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
如果我为我的TextBlock控件设置背景,那么一切正常.但我想要的是使用默认的灰色背景(例如,根本不设置背景).
我怎么能做到这一点?
我目前正在编写一个msbuild脚本,并且有删除问题*.vshost.exe.
在构建和部署项目之前,我运行Clean目标以及此目标.
<Target Name="CleanLogs">
<ItemGroup>
<FilesToDelete Include="$(OutputPath)\*.*" />
</ItemGroup>
<Delete Files="@(FilesToDelete)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
该CleanLogs目标是拿起日志文件,我们生成默认的Clean目标也不会有起色.似乎经常会出现锁定*.vshost.exe.
如何强制删除此文件?
我有一个班,我想装饰两次.但是,当我解决这个类时,Windsor只修饰它一次而不是使用我的2个装饰器.我不确定为什么会这样,因为我在我正在解析的类之前注册了两个装饰器,这就是我理解装饰器与Windsor一起工作的方式.
这是我的代码.
public interface IQueryExecuter
{
TReturn Execute<TReturn>(IQuery<TReturn> query);
}
public class QueryLoggingDecorator : IQueryExecuter
{
private ILogger _logger = NullLogger.Instance;
public ILogger Logger
{
set { _logger = value; }
}
public TReturn Execute<TReturn>(IQuery<TReturn> query)
{
_logger.Info("Before query execute");
var queryResults = query.Execute();
_logger.Info("After query execute");
return queryResults;
}
}
public class QueryTransactionDecorator : IQueryExecuter
{
public TReturn Execute<TReturn>(IQuery<TReturn> query)
{
try
{
Console.WriteLine("Beginning transaction");
var queryResults = query.Execute();
Console.WriteLine("Comitting transaction");
return queryResults;
}
catch (Exception)
{
Console.WriteLine("Rolling back …Run Code Online (Sandbox Code Playgroud)