[英]ASP.NET MVC model that uses more that one db table
我是使用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-中描述的技术AN-MVC的Web应用程序
相关代码是:
public virtual IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
return dbSet.SqlQuery(query, parameters).ToList();
}
在哪里我提供上述查询。
问题(终于!)是实体框架想要一个密钥。 这不是问题,但在这种情况下,键是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:'Punction(t)t.MyProperty'。 当指定多个属性时,使用匿名类型:C#:'t => new {t.MyProperty1,t.MyProperty2}'VB.Net:'Function(t)New From {t.MyProperty1,t.MyProperty2}'。
这是可以修复的吗? 或者我是以完全错误的方式做到这一点的? 我想我可以在Model3中列出Model1和Model2的所有成员,但是这会引入我真正不想要的冗余,但如果这是唯一的方法,那么我会这样做。
对不起,如果其中任何一个不清楚,如果需要,我会尝试清理。 在此先感谢您的帮助!
我认为您需要定义组合键,如果您首先使用Entity Framework代码,则可以在OnModelCreating
方法中的dbContext.cs
中OnModelCreating
此操作
modelBuilder.Entity<Model3>().HasKey(s => new { s.Model1Key, s.Model2Key });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.