2017-04-26 2 views
0

Ich habe ein Modell für Benutzer und Definition istEntity Framework Relationship

public class User 
{ 
    public string UserID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { 
     get 
     { 
      return (FirstName + " " + LastName).Trim(); 
     } 
    } 
    public string EmailID { get; set; } 
    public UserAccessLabel AccessLabel { get; set; } 
    public string Password { get; set; } 
    public string PasswordStore { 
     get 
     { 
      string hashPass; 
      using (Encryption enc = new Encryption()) 
      { 
       enc.Key = EncryptionKey.DefaultKey; 
       hashPass = enc.Encrypt(Password); 
      } 
      return hashPass; 
     } 
     set 
     { 
      string hashPass; 
      using (Encryption enc = new Encryption()) 
      { 
       enc.Key = EncryptionKey.DefaultKey; 
       hashPass = enc.Decrypt(value); 
      } 
      Password = hashPass; 
     } 
    } 
    public byte[] Image { get; set;} 
} 

und fluentAPI Konfigurationsklasse ist

public class UserConfig : EntityTypeConfiguration<User> 
{ 
    public UserConfig() 
    { 
     ToTable("tblUsers"); 
     HasKey(k => k.UserID); 
     Property(p => p.FirstName).IsRequired(); 
     Property(p => p.LastName).IsRequired(); 
     Property(p => p.PasswordStore).IsRequired().HasColumnName("Password"); 
     Property(p => p.Image).HasColumnType("image"); 
     Ignore(i => i.FullName); 
     Ignore(i => i.Password); 
    } 
} 

Und ich habe viele andere Modell wie Produkte, Kategorie, Kunden, usw. und Jedes Modell hat Erstellt und Aktualisierte Eigenschaft, die Benutzer sind.

Und meine Fragen ist, muss ich alle Modelle Sammlung Eigenschaft in Benutzer Modell erstellen?

so etwas wie

public ICollection<Product> Products { get; set; } 



public class ProductConfig:EntityTypeConfiguration<Product> 
{ 
    public ProductConfig() 
    { 
     ToTable("tblProducts"); 
     HasKey(k => k.Code); 
     Property(p => p.Title).IsRequired(); 
     Property(p => p.Title).HasMaxLength(100); 


     HasRequired(c => c.Category).WithMany(p => p.Products).HasForeignKey(f => f.CategoryID).WillCascadeOnDelete(false); 
     HasRequired(u => u.Created).WithMany(p => p.Products).HasForeignKey(f => f.CreatedUser).WillCascadeOnDelete(false); 
     HasRequired(u => u.Updated).WithMany(p => p.Products).HasForeignKey(f => f.UpdatedUser).WillCascadeOnDelete(false); 
    } 
} 

Dank im Voraus

Antwort

0

Wenn Sie diese Sammlungen nicht benötigen, müssen Sie nicht. Es reicht aus, FK-Eigenschaften für diese Entitäten zu haben und entsprechende DbSet-Eigenschaften in Ihrem DbContext zu haben.

aktualisieren

Wenn Sie meinen, dass die FK-ID Spalte nicht leer ist, aber das Objektfeld ist null, ist dies, weil sie standardmäßig nicht geladen werden. Sie können sie laden, indem Erweiterungsmethode Include wie diese

context.Products.Include("Created") 
+0

aber ich bin nicht in der Lage, auf Daten aus Fremdschlüssel Spalte zugreifen, Daten existieren dort in der Datenbank, wenn ich es mit einfachen SQL-Abfrage wie Created_UserID überprüfen, aber im Modell zeigt Null in erstellte Eigenschaft unter Produktmodell – Siraj

+0

Wenn Sie meinen, dass die FK-ID-Spalte nicht leer ist, aber das Objektfeld null ist, liegt das daran, dass sie standardmäßig nicht geladen werden. Sie können sie laden, indem Sie die Erweiterungsmethode 'Include' aufrufen. ' context.Products.Include ("Created") ' – Random

+0

Ja, das war die Antwort, nach der ich gesucht habe. Vielen Dank – Siraj

0

denke ich, was Sie versuchen, eine Eins-zu-Beziehung in Ihrem Code erste Datenbank zu tun machen ist. public ICollection<Product> Products { get; set; } ist die richtige Syntax für die Herstellung von user der Besitzer von vieleproducts. Dann würden Sie in der Produktmodelldatei einen Fremdschlüssel für den Benutzer einfügen.

public class Product 
{ 
    public virtual User ProductsUser {get; set;} 
} 

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

+0

nannte es bedeutet, dass ich so etwas wie ' öffentlichen ICollection Produkte zu schaffen haben {get; einstellen; } public ICollection Anbieter {get; einstellen; } public ICollection Kunden {erhalten; einstellen; } ' in Benutzermodell – Siraj

Verwandte Themen