模型属性引用另一个模型-它是如何工作的
本文关键字:模型 工作 何工作 引用 属性 另一个 | 更新日期: 2023-09-27 18:05:53
我是ASP新手。. NET MVC,但我对PHP了解得更多。因此,如果我在一个数据库中有两个连接的表,通常我会用一个ID -二级键来连接它们。
的例子:电影:
+ ID
+ Title
+ Description
+ Genre
-- Comments --
+ ID
+ MoviesID
+ Comment
从而创建一对多的关系。但是我在ASP中看到了这一点。. NET MVC的人会创建相互引用的模型:
public class Movie {
// Annotations not included
public int ID {get;set;}
public string Title {get;set;}
public string Description {get;set;}
public string Genre {get;set;}
public List<Comment> Comment {get;set;}
}
public class Comment {
public int ID {get;set;}
public Movie Movie {get;set;}
public string Comment {get;set;}
}
一个模型调用另一个模型的部分,它在数据库中是什么样子,如何在数据库中填充这些,如何将一个评论/电影类的值传递给另一个类的数据库当你想要创建新行时?(如果这是有意义的-示例将如何在数据库中插入一个电影对象,当你在数据库中上传一个新的评论。)或者至少你能给我一些资料让我读一下,因为我什么也没找到。
当然,另一个问题是,这样做是明智的,还是应该按照"传统"的方式,按照我在上面所做的模式来做?希望可以理解,谢谢!
您所指的是ORM,即对象-关系映射。
基本上,ORM帮助您将表及其之间的关系视为对象。这种方法使编程在代码和数据库的通用语言方面更加容易。ORM工具也在PHP中广泛使用(搜索Proper, Doctrine)。对于c#,你可以参考NHibernate,实体框架或者像Dapper这样的微orm。您提供的. net方法示例类似于您在PHP中的方法。唯一的区别是您显式地将一个属性标记为外键。您可以将示例更改为:
public class Movie {
//Annootations not included
public int ID {get;set;}
public string Title {get;set;}
public string Description {get;set;}
public string Genre {get;set;}
public List<int> CommentIds {get;set;}
}
public class Comment {
public int ID {get;set;}
public int MovieID {get;set;}
public string Comment {get;set;}
}
,但这只会加载相关记录的标识符。当使用ORM时,您可以将属性(在表中是另一个表记录的标识符)标记为强类型类,这使您能够从数据库加载其所有数据。
长话短说-当使用ORM时,您可以在从DB获取Comment
时加载整个Movie
,而不仅仅是它的标识符。
整个过程及其配置取决于您正在使用的ORM工具,您可以使用映射属性(例如:在实体框架中),或者流畅映射(当使用NHibernate和fluent NHibernate时)。这些工具是相当复杂的(有很多问题要解决-渴望/延迟加载,连接管理,会话管理,LINQ到实体和很多很多,这是不可能解释它在SO:))