使用多个数据库表的 ASP.NET MVC 模型
Posted
技术标签:
【中文标题】使用多个数据库表的 ASP.NET MVC 模型【英文标题】:ASP.NET MVC model that uses more that one db table 【发布时间】:2012-06-27 03:10:15 【问题描述】:我是使用 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-application 中描述的技术
相关代码为:
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。
所以我在这里尝试使用第二种技术: in entity framework code first, how to use KeyAttribute on multiple columns
即使用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:'函数(t)t.MyProperty'。指定时 多个属性使用匿名类型:C#: 't => new t.MyProperty1, t.MyProperty2 ' VB.Net: 'Function(t) New From t.MyProperty1, t.MyProperty2 '。
这是可以修复的吗?还是我这样做完全错误?我想我可以在 Model3 中列出 Model1 和 Model2 的所有成员,但这引入了我真的不想要的冗余,但如果这是唯一的方法,那么我会这样做。
抱歉,如果有任何不清楚的地方,我会在需要时尝试解决问题。提前感谢您的帮助!
【问题讨论】:
【参考方案1】:我认为您需要定义复合键,如果您首先使用实体框架代码,您可以在 dbContext.cs
中的 OnModelCreating
这样的方法中执行此操作
modelBuilder.Entity<Model3>().HasKey(s => new s.Model1Key, s.Model2Key );
【讨论】:
感谢您的回复!对不起,但我想我造成了一些混乱。您所拥有的与我所做的类似(请参阅编辑中的新代码段)。我认为问题在于我的 LINQ 也缺少。我认为这归结为一个问题,在那个 LINQ 表达式中,我可以做 u.Model1.model1KeyPart,还是我必须直接在 model3 中制作 model1KeyPart,这样它就像你拥有它一样?显然我的方式存在一些问题。但也许有解决办法?以上是关于使用多个数据库表的 ASP.NET MVC 模型的主要内容,如果未能解决你的问题,请参考以下文章