C# 代码优先-添加到相关的“;表格「;在模型中?
我有类似的东西C# 代码优先-添加到相关的“;表格「;在模型中?,c#,asp.net-mvc,entity-framework,ef-code-first,domain-driven-design,C#,Asp.net Mvc,Entity Framework,Ef Code First,Domain Driven Design,我有类似的东西 public class Adult { public int AdultId { get; set; } public string Name { get; set; } public virtual IEnumerable<NicknamedKid> NicknamedKids { get; set; } } public class Child { public int ChildId { get; set; } pu
public class Adult
{
public int AdultId { get; set; }
public string Name { get; set; }
public virtual IEnumerable<NicknamedKid> NicknamedKids { get; set; }
}
public class Child
{
public int ChildId { get; set; }
public string Name { get; set; }
}
public class NicknamedKid
{
public int AdultId { get; set; }
public int ChildId { get; set; }
public string Nickname { get; set; }
}
公共类成人
{
public int AdultId{get;set;}
公共字符串名称{get;set;}
公共虚拟IEnumerable昵称dkids{get;set;}
}
公营儿童
{
public int ChildId{get;set;}
公共字符串名称{get;set;}
}
公共类昵称dkid
{
public int AdultId{get;set;}
public int ChildId{get;set;}
公共字符串昵称{get;set;}
}
我的问题是,如果我想创建一个新的昵称ID
并将其添加到成人,我会将添加昵称ID
的方法放在成人
类上,还是放在一些成人存储库
类上?而且,如果我将它添加到成人
类中,是否意味着该类必须知道存储库
类才能添加它
我想我对模型应该了解多少数据层感到困惑。我认为模型应该能够处理自己的层,不知道任何
存储库
或DbContext
,但我认为这是不可取的(或可能的)我责怪微软。无论如何,这通常是一个安全的立场,但特别是在这里,他们真的弄乱了术语。您有一个名为MVC的框架,它显然是按照MVC模式建模的,它们在您的项目中为您提供了名为“模型”、“视图”和“控制器”的文件夹。他们搞砸的地方是创建示例项目,在“模型”文件夹中填充实体,而实体不是模型
如果您来自另一个MVC框架,比如RubyonRails或Django,那么您已经习惯了持久化模型的概念,它也是持久化数据的存储库。然而,微软在MVC上并没有朝这个方向发展,相反,你得到了一个实体,没有关于什么是或者如何建立你的模型的指导。自然的假设是,实体就是模型,就像在你的例子中一样,这只会让人困惑
那么什么是实体?它本质上只是一个DTO,一个数据传输对象。它是一个数据库表的类表示形式,仅作为实体框架填充其检索的数据的地方。MVC模式中的“模型”实际上是存储库/服务(DAL)和视图模型的合并,它们实际上更接近模型本身的概念,而不是实体
为了回答您的问题,那么,不,成人不应负责添加昵称dkid
,也不应引用实体框架或任何存储库。它应该只保存持久化的数据和持久化所需的任何应用程序逻辑
另外,只要我们在这里,昵称ID
就不应该引用maintal
,成年人也不应该知道昵称ID
maintal
引用了Child
,即使您还没有这样设置,昵称ID
实际上只是Child
的一个子类。实际上,您只是在Child
和昵称dkid
之间手动实现了TPT(每种类型的表)继承,而实际上没有从另一个继承一个<代码>昵称
实际上只是一个特定类型的子属性
(也就是说,一个有昵称的实体。无论如何,你不应该有一个实体与另外两个实体有外键的实体有外键。如果你需要从成人获取昵称ID
,你可以通过儿童。没有必要建立单独的关系。我责备你微软。无论如何,这通常是一个安全的立场,但在这里,他们确实弄乱了术语。你有一个名为MVC的框架,显然它是按照MVC模式建模的,他们在你的项目中为你提供了名为“模型”、“视图”和“控制器”的文件夹他们搞砸的地方是创建示例项目,在“模型”文件夹中填充实体,而实体不是模型
如果你来自另一个MVC框架,比如Ruby on Rails或Django,你已经习惯了持久化模型的概念,它也是持久化数据的存储库。然而,微软在MVC上并没有朝这个方向发展,相反,你得到了一个实体,没有关于什么是或如何设置模型的指导。自然的假设是那么,在实体上就是模型,就像在你的例子中一样,它只会让人困惑
那么实体是什么呢?它本质上只是一个DTO,一个数据传输对象。它是一个数据库表的类表示,只是作为实体框架填充它检索到的数据的地方。MVC模式中的“模型”实际上是存储库/服务(DAL)的合并以及视图模型,它们实际上更接近模型本身的概念,而不是实体
为了回答您的问题,那么,不,maintal
不应该负责添加昵称dkid
,也不应该引用实体框架或任何存储库。它应该只保存持久化的数据和持久化所需的任何应用程序逻辑
另外,只要我们在这里,昵称ID
就不应该引用maintal
,成年人也不应该知道昵称ID
maintal
referencesChild
,即使你没有这样设置(现在),nicknickdkid
实际上只是Child
的一个子类。实际上,您只是在Child
和nicknickdkid
之间手动实现了TPT(每种类型的表)继承,而实际上没有从另一个继承