【发布时间】:2015-10-12 10:23:48
【问题描述】:
首先我想提一下,我已经搜索了互联网以找到问题的解决方案,但是我无法解决任何问题。我对 EF 还很陌生,所以我对 DBContext 或 ObjectContexts 没有完全了解,因此可能需要进一步解释。我的 EF 代码是先建数据库的。
我的情景
下面是我的 DriveDB 类,我在其中附加了我的 Client_Type(以及为简单起见我在示例中省略的其他类)。
public partial class DriveDB : DbContext
{
public DriveDB()
: base("name=DriveDB")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Client_Type> Client_Type { get; set; }
public virtual DbSet<Entity> Entities { get; set; }
public virtual DbSet<EntityContact> EntityContacts { get; set; }
public virtual DbSet<Person> People { get; set; }
}
public class DataAccessService : IDataAccessService
{
DriveDB MainRepository;
public DataAccessService()
{
MainRepository = new DriveDB();
}
public void CommitChanges()
{
MainRepository.SaveChanges();
}
}
我的逻辑是,由于现在附加了 Client_Type 表,因此我要更新这些表所需要做的就是运行 .SaveChanges() 方法,这两个表都将被更新。但情况并非如此,因为显然它们不共享相同的ObjectContext。我意识到DBContext 和ObjectContext 之间存在差异,但我不知道如何解决这个问题。
我尝试将Client_Type 分离并附加到DriveDB,但我从未找到正确的解决方案。
如何在编译器不抛出异常的情况下更新数据库?
Xaml:
<ComboBox Style="{StaticResource DataComboBox}" ItemsSource="{Binding Client_type_list}" SelectedItem="{Binding Record.Client_Type, Mode=TwoWay}" ItemTemplate="{StaticResource Client_typeDataTemplate}"/>
<DataTemplate x:Key="Client_typeDataTemplate">
<TextBlock Text="{Binding client_type1}"/>
</DataTemplate>
【问题讨论】:
-
您能否发布更新引发异常的实体的代码?调用 CommitChanges 之前的 IE 代码
-
“MainRepository”中记录的属性绑定到 WPF 控件,例如文本框,或者在出现此错误的情况下,它绑定到 ComboBox 请参阅 asnwer 中的 Xaml
-
Record 对象是一个实体
标签: c# entity-framework mvvm