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