我是使用 MVC 的新手,我正在尝试制作一个使用其他模型的模型。
假设我的数据库中有 2 个表,为了这个问题,我将它们称为 Table1 和 Table2。在我的 MVC 项目中,这些对应于 Model1 和 Model2。现在我想要 Model 3,就像:
public class Model3
{
public Model1 model1 { get; set; }
public Model2 model2 { get; set; }
public string someString { get; set; }
}
我想使用如下所示的 T-SQL 查询来创建它:
SELECT * FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.fk = t2.pk
现在,为了运行这个查询,我使用了http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/advanced-entity-framework-scenarios-for-中描述的技术一个-mvc-web-应用程序
相关代码为:
public virtual IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
return dbSet.SqlQuery(query, parameters).ToList();
}
我在其中输入上述查询。
问题(终于!)是实体框架需要一个密钥。这不会有问题,但在这种情况下,key 是 Table1.table1KeyPart 和 Table2.table2KeyPart,对应于 Model1.model1Keypart 和 Model2.model2keypart。
所以我在这里尝试使用第二种技术: 首先在实体框架代码中,如何在多个列上使用 KeyAttribute
也就是使用 HasKey 的那个,用u.Model1.model1KeyPart
,u.Model2.model2KeyPart
代替 userID 和 userName。像这样:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Model3>().HasKey(u => new
{
u.Model1.model1KeyPart,
u.Model2.model2keyPart
});
}
我得到错误:
属性表达式 '[u => new <>f__AnonymousType1`2(model1KeyPart = u.Model1.model1KeyPart, model2KeyPart = u.Model2.model2KeyPart)]' 无效。该表达式应表示一个属性:C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'。指定多个属性时使用匿名类型:C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'。
这是可以修复的吗?还是我这样做完全错误?我想我可以在 Model3 中列出 Model1 和 Model2 的所有成员,但这会引入我真的不想要的冗余,但如果这是唯一的方法,那么我会这样做。
抱歉,如果有任何不清楚的地方,如果需要,我会尽力解决问题。提前感谢您的帮助!