asp.net MVC 3 응용 프로그램에서 작업 중이며 codeFirst 방식을 사용하고 있습니다. 나는 역사 테이블이나 사용자 테이블을 만들려고하는데, 어디에서 사용자가 수정 한 컬럼인지 추적하고 싶습니다. 먼저 EF Code First를 사용하여이 작업을 수행 할 수 있습니다.Entity Framework 4.1을 사용하여 내역 테이블 만들기
DataContext.savechanges 이후에해야합니까?
좋습니다.
감사합니다.
asp.net MVC 3 응용 프로그램에서 작업 중이며 codeFirst 방식을 사용하고 있습니다. 나는 역사 테이블이나 사용자 테이블을 만들려고하는데, 어디에서 사용자가 수정 한 컬럼인지 추적하고 싶습니다. 먼저 EF Code First를 사용하여이 작업을 수행 할 수 있습니다.Entity Framework 4.1을 사용하여 내역 테이블 만들기
DataContext.savechanges 이후에해야합니까?
좋습니다.
감사합니다.
DbContext은 Entry<T>
불리는 방법이 있습니다
var entity = context.Items.Find(id);
entity.Name = "foobar";
var entry = context.Entry<Item>(entity);
항목 DbEntityEntry<T>
형의 것 및 특성과 OriginalValues
CurrentValues
있다.
이러한 속성을 일반적으로 검사하여 변경 내용을 확인한 다음 기록을 내 기록 테이블에 자동으로 삽입 할 수 있습니다.
또는 데이터베이스 트리거를 사용하십시오.
나는이 그것을 할 수있는 "appropiate"방법은 정말 잘 모르겠어요,하지만은 일반적으로 SQL에서 수행하는 방법입니다
version
을 만듭니다.IsLatestVersion
을 추가하십시오.IsLatestVersion
= false에서 엔티티를 설정하십시오.version
을 증가시키고 변경 사항을 새 엔티티로 저장하십시오.원 테이블과 다른 테이블을 생성하고 싶습니다. 사용자가 column1과 column5를 업데이트하면이 날짜에 열 1과 열 5가 수정 된 내역 테이블에 저장하려고합니다.이전 값을 저장하고 원본 테이블에서 새로운 값을 선택할 수 있습니다. EF를 사용하면 어떻게 할 수 있습니까? 나는 이런 것을 찾고있다. http://stackoverflow.com/questions/6689291/history-in-database-using-entity-framework – DotnetSparrow
ActionFilterAttribute에서 상속받은 필터를 원하는 것처럼 들리겠습니다. 제 경우에는 이것이 제가 가진 가장 간단한 예입니다. 이것은 내 모델이며, 속성이 데이터베이스에 대한 매핑을 지정한다는 점에 유의하십시오. 내 경우
[Table("UserProfile")]
public class UserProfile
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
}
은, 역사적 아니었지만, 다음처럼 간단했다 :
public sealed class UsersContext : DbContext
{
public UsersContext() : base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
LazyInitializer.EnsureInitialized(ref _initializer, ref isInitialized, ref initializerLock);
}
public void CheckDatabase()
{
Database.SetInitializer<YourDBContextType>(null);
using (var context = new YourDBContextType())
{
if (!context.Database.Exists())
{
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
// Uses your connection string to build the following table.
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
최종 결과는 EF되는 코드가 처음이 아니라도에 대한 모델을 가능하게 복잡한 엔티티에서 파생 된 프리미티브를 사용하도록 뷰를 수정하십시오. 자네가 다른 것을 가지고 있다면, 역사적으로 DBContext라고 말하면 텍스트 변환 파일을 수정하거나 엔티티의 기본 클래스를 만드는 것이 좋습니다. 두 가지 방법 모두 테이블에 삽입 할 수있는 코드를 쉽게 생성 할 수 있습니다. 그런 다음 해당 엔티티에 대한 후속 작업을 수행하여 기록 모델에 복제하고 저장합니다. 모든 것은 말했듯이, 나는 프레임 워크 대신에 제약 조건, 트리거 등에 집중하는 데이터베이스의 첫 번째 접근 방식에 대한 팬이다.
감사에 관한 흥미로운 게시물이 있습니다. [http://blogs.msdn.com/b/simonince/archive/2009/04/20/auditing-data-changes-in-the-entity-framework- part-2.aspx), 어떻게 생각하니? – ibiza