我有一个当前的第二个版本的本地数据库,现在应该转到它的第三个版本.
以前迁移的代码是由另一个程序员生成的,所以我假设我在这里做错了.
在我的模型中有大约30个类,在模型文件夹中有一个映射文件夹,它包含这30个类的映射.
所以现在我以与之前的类相同的方式添加了1个新类,然后在包管理器控制台中运行add-migration命令.
幸运的是,我获得了一个空迁移Up()和Down()方法.
当我查看数据库时,有一个__migrationHistory可用于前两次迁移.如果我现在运行我的应用程序,也会添加第三个迁移,但显然没有创建新表,因为它不在Up()方法中.
我能做错什么?
我认为在搭建以前的迁移时会出现问题......就像它找不到我添加的新的Code-First类一样.
这是我的命令:
add-migration "1.2" -verbose -ProjectName "MyEFproject"
Run Code Online (Sandbox Code Playgroud)
我假设脚手架不知道在哪里寻找新类...或者按照惯例,所有模型类都只是在项目中?
添加迁移的结果:
namespace MyProject.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class _1002 : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
新模型类的示例:
using System;
using System.Collections.Generic;
namespace MyProject.Models
{
public partial class MyTable
{
public string SomeId { get; set; }
public string SomeText { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
新Mapping类的示例
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
namespace MyProject.Models.Mapping …Run Code Online (Sandbox Code Playgroud) 我有一个数据网格,它有一个列(最后一个)应该总是在有空间时显示.不幸的是,我无法实现这一点,无法在任何地方找到解决方案.
这个WPF应用程序可用于纵向模式和横向模式......
在纵向模式下启动应用程序时,我希望datagrid始终显示最后一列,但最初它隐藏了几列.但是当通过前景调整应用程序(获得更大的宽度),然后返回到纵向模式时,它确实按预期工作.
大多数列的宽度设置为Auto或*.只有最后一列的最小宽度为80像素因为我不希望那个调整大小,所以应该始终显示.
以下是网格的设置:
<DataGrid Grid.Row="1"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Path=MyCollection,
Mode=OneWay}"
RowDetailsVisibilityMode="Collapsed"
RowHeaderStyle="{StaticResource ExpanderRowHeaderStyle}"
SelectionMode="Single"
SelectionUnit="Cell">
Run Code Online (Sandbox Code Playgroud)
然后当我调整景观时:
为了让我的初始情况看起来像图3,我可以改变什么...所以所有列都从头开始显示(无需调整大小)?
编辑:为清楚起见:当我说纵向和横向模式时,我的意思是该软件用于Windows平板电脑,但同样的问题也出现在常规屏幕上.当窗口最初很小时,并非所有列都显示,但是当我放大窗口然后调整回原始的小尺寸时,所有列都会显示.
编辑2:
我可以解决问题,如果我将第一列的宽度更改为*而不是自动....我不知道为什么虽然.......这里是完整的DataGrid
<DataGrid Grid.Row="1"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Path=BstCollection,
Mode=OneWay}"
RowDetailsVisibilityMode="Collapsed"
RowHeaderStyle="{StaticResource ExpanderRowHeaderStyle}"
SelectionMode="Single"
SelectionUnit="Cell"
EnableRowVirtualization="False" Loaded="DataGrid_Loaded" DataContextChanged="DataGrid_DataContextChanged" ColumnWidth="*">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource IsLastOrderToBooleanMultiConverter}">
<MultiBinding.Bindings>
<Binding Mode="OneWay"
Path="BstCollection[0].BesbstldOp"
Source="{StaticResource BstGbrModel}" />
<!-- ReSharper disable Xaml.BindingWithContextNotResolved -->
<Binding Mode="OneWay" Path="BesbstldOp" />
<Binding Mode="OneWay" …Run Code Online (Sandbox Code Playgroud) 我有以下内容:
new ObservableCollection<SomeData>(SomeDataCollection.Where(a => a.AGD_Category.Equals((int)AGD_CategoryEnum.Med) && ((a.AGG_DateStart.Date <= SelectedUntill) && (a.AGG_DateEnd.Value.Date >= SelectedFrom))));
Run Code Online (Sandbox Code Playgroud)
现在我的a.AGG_DateEnd是一个可以为空的日期时间,只要列表中有空值,我就会因为"a.AGG_DateEnd.Value.Date"部分而得到异常.
但问题是,a.AGG_DateEnd还包含小时和分钟,但我不希望这导致我的比较给出不可靠的结果.
我该怎么做才能改善?
谢谢,
第一次加载窗口时,我希望折叠文本框,同时保持对Viewmodel中属性(SomeProp)的绑定。
不幸的是,我无法做到这一点。
我尝试过的
尝试1:我尝试在viewmodel的构造函数中将值显式设置为null,并显式调用Onpropertychanged。转换器未触发。
尝试2:在后面的代码中,我将默认可见性设置为visible.Collapsed。这似乎有一个副作用,即“可见性”不再绑定到SomeProp属性。
尝试3:在谷歌搜索后,我发现了一些关于PriorityBinding的信息,但这似乎仅适用于文本框的TEXT属性。 当由于空值而无法评估绑定时,请使用默认值
先感谢您,
额外信息:
我有一个文本框,并且仅当ViewModel中的属性(SomeProp)的值为“其他”时,该文本框才可见。我已经为此成功使用了转换器。这意味着每当我更改SomeProp的值时,文本框就将根据SomeProp的值变为可见/不可见。我使用了以下代码: WPF:按字符串内容的绑定可见性
有谁知道我如何在保持绑定到属性SomeProp的同时将“文本框可见性”设置为“已折叠”。
XAML
<TextBox Name="txtbox" Visibility="{Binding SomeProp.Description, Converter={StaticResource StringOtherToVisibilityConverter}}" TextWrapping="Wrap" Height="150" MaxLength="2000"
Text="{Binding SomeProp2.Text, Mode=TwoWay}"
ScrollViewer.VerticalScrollBarVisibility="Auto" AcceptsReturn="True">
</TextBox>
Run Code Online (Sandbox Code Playgroud)
转换器
class StringOtherToVisibilityConverter : System.Windows.Markup.MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
if (value.ToString() == "Other")
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
else
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo …Run Code Online (Sandbox Code Playgroud) 我有一个实体列表,当一些实体改变时,我只需执行以下操作:
DBContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
并保存所有修改.
但是现在我必须在某些实体被更改时(并且仅针对那些已更改的实体)执行一些业务逻辑,并且需要找到那些已更改的实体.但我似乎无法做到这一点.
我遇到过这篇文章:实体框架5 - 为什么在PropertyValue设置回原始状态后实体状态为"已修改"
有人检查.EntityState财产....
但我的实体没有这个属性.
作为最后的手段,我可以INotifyPropertyChanged在我的模型级别上使用,但如果EF5让我知道该实体的状态会很好.