从另一个表中设置属性,没有任何关系实体框架

时间:2016-02-18 21:43:05

标签: c# entity-framework

我正在尝试根据另一个与另一个没有关系的实体在我的实体中设置一个属性。实体从数据库中设置属性,我希望从数据库中的另一个表中设置其中一个属性,但我无法深入到它的底部。

例如,

public class First {
    [Key]
    public int ProdId { get; set; }
    public string Supplier { get; set; }
    public virtual ICollection<Log> Logs { get; set; }
    [NotMapped]
    public bool IsSavedForLater
        {
            get
            {
                return Logs.Where(l =>
                {
                    var content = l.LogContent.JsonStringToObject<History>();
                    return (content.ProdId == ProdId && l.TableName == "Condition");
                }).Any();
            }
        }
}

正如您所看到的,属性IsSavedForLater是[NotMapped],我希望从日志中设置此属性,

这是日志实体,

public class Log
{
    [Key]
    public int LogId { get; set; }
    public string LogContent { get; set; }
    public string TableName { get; set; }
    public DateTime LogDate { get; set; }
    public string BlameName { get; set; }
    public bool? Deleted { get; set; }
}

是否可以在没有任何数据库关系的情况下进行此类导航?

1 个答案:

答案 0 :(得分:0)

伙计们,经过大量时间的考虑,我找到了我的解决方案。

我做的是,我在我的First类中添加了第一个属性,如此

public class First {
    [Key]
    public int ProdId { get; set; }
    public string Supplier { get; set; }
    public string TableName { get; set; }
    public virtual ICollection<Log> Logs { get; set; }
}

正如您所看到的,First类有一个新属性TableName,它也在我的Logs类中,

public class Log
{
    [Key]
    public int LogId { get; set; }
    public string LogContent { get; set; }
    public string TableName { get; set; }
    public DateTime LogDate { get; set; }
    public string BlameName { get; set; }
    public bool? Deleted { get; set; }
}

然后我在db上下文类中添加了一个这样的模型构建器,

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<SmuForecasting>().HasKey(x => new { x.TableName }).HasMany(x => x.PsLogs).WithOptional().HasForeignKey(x => new { x.TableName });
}

这对我来说非常有用但有副作用,它取代了开头设置的原始键,所以我最终做了一个完全不同的方法。