2012-06-14 48 views
0

所以我仍然堅持我一直在努力的審計表。sql server審計表第一個代碼MVC

這些都是我的模型:

public interface Audit { 
int AuditById {get;set;} 
DateTime AuditOn {get;set;} 

User AuditBy {get;set;} 
} 
User { 
Id {get;set;} 
Email {get;set;} 
Password {get;set;} 
} 
Profile : Audit { 
public int Id {get;set;} 
public string Name {get;set;} 
public int AuditById {get;set;} 
public DateTime AuditOn {get;set;} 

public User AuditBy {get;set;} 
public User User {get;set;} 
} 

這是對我的質數據庫方面,以確保用戶將擁有所需的配置文件,但配置文件不具有要求的用戶。

Dbase: DbContext{ 
    modelbuilder.Entity<Profile>() 
    .hasoptional(e => e.User) 
    .withrequired(u => u.Profile); 
} 

在我的種子,這是我爲我的第一個用戶/管理員做:

var admin = new User{ 
    Id = 1, 
    Email = '[email protected]', 
    Password = 'woop', 
    Profile = new Profile { 
      Name = 'admin name', 
      AuditById = 1, 
      AuditOne = DateTime.Now 
    } 
} 

所以,我得到這個錯誤:

"Unable to determine a valid ordering for dependent operations. Dependencies may exist due to fk constraints, model requirements, or store generated values"

我明白AuditById導致它保持爲1,這在Save中仍然不存在。有沒有辦法解決這個問題?或者有關如何建模用戶和配置文件表的建議?即使沒有用戶,我也需要該配置文件存在,並且用戶無法在沒有配置文件的情況下存在。

感謝您的幫助,謝謝!

回答

0

嘗試先創建配置文件記錄,然後在創建用戶記錄時添加對其的引用。

dbContext.Profiles.Add(new Profile { Id = 1, ... }); 

var admin = new User{ 
    Id = 1, 
    Email = '[email protected]', 
    Password = 'woop', 
    ProfileId = 1 
    } 
} 

dbContext.Users.Add(admin); 

dbContext.SaveChanges(); 

另外,我假設你在你的問題中包含的代碼是僞代碼,如果不是你很可能缺少一些重要的東西(如navigation properties),也許下面的幫助:

class User 
{ 
    [Key] 
    protected int Id { get; set; } 

    [ForeignKey("Profile")] 
    protected int ProfileId { get; set; } 

    protected Profile Profile { get; set; } 

    ... 

} 

class Profile 
{ 
    [Key] 
    protected int Id { get; set; } 

    [ForeignKey("User")] 
    protected int? UserId { get; set; } 

    protected User User { get; set; } 

    ... 
} 
+0

是的它是一個僞代碼,但我在dbcontext上使用modelbuilder分配了密鑰。 – gdubs