繁体   English   中英

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

[英]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.model1KeyPartu.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.csOnModelCreating此操作

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM