У меня есть таблица, и я разделился на 2 объекта:
public class User
{
[key]
public byte ID{get;set;}
...
...
public virtual UserAddress{get;set;}
}
class UserAddress:
public class UserAddress
{
[key]
public byte ID{get;set;}
public string Address{get;set;}
...
}
Когда я пытаюсь вставить, он работает отлично.Но я хочу обновить UserAddress без загрузки данных пользователя:
GenericDAO.cs
public abstract class GenericDAO<TEntity>: IGenericRepository<TEntity> where TEntity : class
{
private ObjectContext _context;
private IObjectSet<TEntity> _objectSet;
public GenericDAO()
: this(((IObjectContextAdapter)new MyContext()).ObjectContext)
{
}
public GenericDAO(ObjectContext context)
{
_context = context;
_objectSet = _context.CreateObjectSet<TEntity>();
}
public void Save(TEntity entity, System.Data.EntityState state)
{
if(state == System.Data.EntityState.Added)
_objectContext.AddObject(entity);
else
_objectContext.Attach(entity);
_context.ObjectStateManager.GetObjectStateEntry(entity).ChangeState(state);
_context.SaveChanges();
}
Как я уже говорил, когда я добавляю объект, работает.Но когда я пытаюсь обновить объект, я не получаю никакой ошибки, но мой UserAddress не обновляется.
Кто-нибудь может мне помочь?
Заранее спасибо
РЕДАКТИРОВАТЬ: GenericDAO.cs обновляется.
My MyContext.cs
public MyContext : DbContext
{
public DbSet<User> User{get;set;}
public DbSet<UserAddress> UserAddress {get;set}
protected override OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserConfiguration());
modelBuilder.Configurations.Add(new UserAddressConfiguration());
}
}
UserConfiguration.cs
public class UserConfiguration: EntityTypeConfiguration<User>
{
public UserConfiguration()
: base()
{
HasKey(p => p.ID);
Property(p => p.ID).HasColumnName("UserID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
HasRequired(p => p.UserAddress).WithRequiredPrincipal();
ToTable("User");
}
}
UserAddressConfiguration.cs
public class UserAddressConfiguration : EntityTypeConfiguration<UserAddress>
{
public UserAddressConfiguration ()
: base()
{
HasKey(p => p.ID);
ToTable("User");
}
}
ConcreteDAO.cs
public class ConcreteDAO<T> : GenericDAO<T> where T: class
{
}
И внутри моего UserDAO.cs
public class UserDAO
{
public static void Save(User user)
{
System.Data.EntityState state = System.Data.EntityState.Added;
if (user.ID > 0)
state = System.Data.EntityState.Modified;
new ConcreteDAO<User>().Save(user, state);
}
}