Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从没有关系实体框架的另一个表设置属性_C#_Entity Framework - Fatal编程技术网

C# 从没有关系实体框架的另一个表设置属性

C# 从没有关系实体框架的另一个表设置属性,c#,entity-framework,C#,Entity Framework,我试图在我的实体中设置一个属性,该属性基于另一个实体,该实体之间没有任何关系。该实体从数据库中设置属性,我希望从数据库中的另一个表中设置其中一个属性,但我无法了解到底 比如说, public class First { [Key] public int ProdId { get; set; } public string Supplier { get; set; } public virtual ICollection<Log> Logs { get;

我试图在我的实体中设置一个属性,该属性基于另一个实体,该实体之间没有任何关系。该实体从数据库中设置属性,我希望从数据库中的另一个表中设置其中一个属性,但我无法了解到底

比如说,

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

不需要任何数据库关系就可以这样导航吗?

伙计们,我花了大量时间才找到了解决方案

我所做的是,我在第一个类中首先添加了另一个属性,如下所示

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; }
}
然后我在db上下文类中添加了一个模型生成器,如下所示

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; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<SmuForecasting>().HasKey(x => new { x.TableName }).HasMany(x => x.PsLogs).WithOptional().HasForeignKey(x => new { x.TableName });
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasKey(x=>new{x.TableName}).HasMany(x=>x.PsLogs).WithOptional().HasForeignKey(x=>new{x.TableName});
}

这对我来说非常好,但有副作用,它取代了最初设置的原始键,因此我最终采用了完全不同的方法。

现在不起作用了吗?表面上看,似乎应该这样做。请注意,EF不会映射get only属性,因此NotMapped属性是多余的。@EricJ。不,它不起作用,我首先得到的是
无效列\u ProdId
错误,关于NotMapped的好处是,如果您实际循环遍历日志而不是使用Linq,您可能会更幸运地隔离错误。另外,顺便提一下,
日志。其中(…)。Any()
是多余的。您可以只使用
日志。任何(…)
您实际上是说
首先
不能有
日志
集合,因为外键不存在。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<SmuForecasting>().HasKey(x => new { x.TableName }).HasMany(x => x.PsLogs).WithOptional().HasForeignKey(x => new { x.TableName });
}