实体框架关系

时间:2017-04-26 03:59:16

标签: c# entity-framework entity-framework-6

我有一个用户模型,定义是

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;}
}

和fluentAPI配置类是

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);
    }
}

我还有很多其他型号,如产品,类别,客户等。每个型号都有已创建已更新属性,这些属性都是用户。

我的问题是,我是否必须在用户模型中创建所有模型集合属性?

类似

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);
    }
}

提前致谢

2 个答案:

答案 0 :(得分:0)

我认为你要做的是在你的代码第一个数据库中建立一对多的关系。 public ICollection<Product> Products { get; set; }是使每个user成为许多 products的所有者的正确语法。然后在产品模型文件中,您将为其用户包含一个外键。

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

答案 1 :(得分:0)

如果您不需要这些系列,那么您就不必这样做了。它足以在这些实体上具有FK属性,并在DbContext中具有相应的DbSet属性。

<强>更新

如果您的意思是FK id列不为空但对象字段为null,则这是因为默认情况下不加载它们。您可以通过调用扩展方法Include来加载它们

context.Products.Include("Created")