使用多个db表的ASP.NET MVC模型

时间:2012-06-27 03:10:15

标签: c# asp.net-mvc model

我是使用MVC的新手,我正在尝试制作一个使用其他模型的模型。

假设我在我的数据库中有2个表,为了这个问题,我只是将它们称为Table1和Table2。在我的MVC项目中,这些对应于Model1和Model2。现在我想要模型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-application

中描述的技术

相关代码是:

public virtual IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
    return dbSet.SqlQuery(query, parameters).ToList();
}

我在上面提供上述查询。

问题(终于!)是实体框架想要一个密钥。这不是问题,但在这种情况下,键是Table1.table1KeyPart和Table2.table2KeyPart,对应于Model1.model1Keypart和Model2.model2keypart。

所以我尝试使用第二种技术: in entity framework code first, how to use KeyAttribute on multiple columns

即使用HasKey,u.Model1.model1KeyPartu.Model2.model2KeyPart而不是userID和userName。像这样:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Model3>().HasKey(u => new
        {
            u.Model1.model1KeyPart,
            u.Model2.model2keyPart
        });
    }

我收到错误:

  

属性表达式'[u =&gt; new&lt;&gt; f__AnonymousType1`2(model1KeyPart = u.Model1.model1KeyPart,model2KeyPart = u.Model2.model2KeyPart)]'是   无效。表达式应代表一个属性:C#:'t =&gt;   t.MyProperty'VB.Net:'Punction(t)t.MyProperty'。指定时   多个属性使用匿名类型:C#:'t =&gt;新{   t.MyProperty1,t.MyProperty2}'VB.Net:'Function(t)New From {   t.MyProperty1,t.MyProperty2}'。

这是可以修复的吗?或者我是以完全错误的方式做到这一点的?我想我可以在Model3中列出Model1和Model2的所有成员,但是这会引入我真正不想要的冗余,但如果这是唯一的方法,那么我会这样做。

很抱歉,如果其中任何一项不清楚,我会尽量清理一下。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

我认为您需要定义组合键,如果您首先使用Entity Framework代码,则可以在dbContext.cs方法OnModelCreating中执行此操作

modelBuilder.Entity<Model3>().HasKey(s => new { s.Model1Key, s.Model2Key });