我将很快将 Entity Framework 用于预订系统(从头开始制作)。
我一直在做一些原型(prototype),试图在项目开始之前弄清楚我想做什么(我仍在与客户讨论需求等)。
考虑这种情况:
我有一个预订,一个预订可以有关联的资源,可以预订,但这些资源可以不同,并且有不同的字段等。
我以前从未真正使用过 EF,所以我不知道如何实现这种多态性,而我在其他项目(我们一直在使用原始 SQL)中使用过这种多态性。
C# 模型如下所示:
public class Booking
{
public int BookingID { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public IRessource Ressources { get; set; }
...
}
public interface IRessource
{
public int RessourceTypeId { get; set; }
}
public class Room : IRessource
{
public int RoomID { get; set; }
public int RessourceTypeId { get; set; }
...
}
public class Car : IRessource
{
public int CarID { get; set; }
public int RessourceTypeId { get; set; }
...
}
这是否可以实现,如果可以,那么如何实现? 查询看起来会怎样?
最佳答案
是的,绝对。
听起来你真的想要一个 Table Per Type (TPT)关系。这表示标准的 is-a/has-a 外键关系。请注意, Entity Framework 默认使用每层次结构表 (TPH)。
以下是一些链接:
我强烈建议你自己浏览其中的一些链接,但要提取的要点是你使用类似的东西:
modelBuilder.Entity<IRessource>().ToTable("IRessources");
modelBuilder.Entity<Room>().ToTable("Rooms");
modelBuilder.Entity<Car>().ToTable("Cars");
两者都继承自上面演示代码中的 IRessource。然后,您可以在这些单独的表和中央 IRessource 表之间进行联接,以获取与各个实体相关的所有信息。
类似于:SELECT * FROM IRessource i JOIN Room r ON i.id == r.id
但是,您经常会发现,如果您使用 Web API Controller ,如果您只是拉取整个 Room POCO,您将获得它的所有内容无需连接即可立即获取属性!
根据我的经验,我还发现如果您不使用接口(interface)或抽象类通常事情会变得更顺利,因为如果您这样做,您将不得不创建数据传输对象 (DTO)偶尔传输数据,因为您无法实例化这些类型的对象。事情可能会变得有点困惑——尤其是当您不确定自己在做什么时。为帮助您理解,请想像一个 Controller ,您希望通过该 Controller 传入一个通用 IRressource —— 它会在接收到这些对象时尝试将它们转换为无法实例化的对象。无赖!因此,简单的解决方案就是将基类和继承类都设为普通类。
关于c# - Entity Framework 多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18904582/
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我想获取主题名称与搜索关键字匹配的所有配置文件。现在我正在加载所有配置文件。我需要知道如何实现它。非常感谢任何帮助。配置文件.rbhas_many:categorizationshas_many:subjects,through::categorizations主题.rbhas_many:categorizationshas_many:profiles,through::categorizations分类.rbbelongs_to:profilebelongs_to:subjectviews/search/index.html.erb#searchform'get'do%>nil%>#
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
我使用的是遗留数据库,所以我无法控制数据模型。他们使用了很多多态链接/连接表,就像这样createtableperson(per_ident,name,...)createtableperson_links(per_ident,obj_name,obj_r_ident)createtablereport(rep_ident,name,...)其中obj_name是表名,obj_r_ident是标识符。因此链接的报告将按如下方式插入:insertintoperson(1,...)insertintoreport(1,...)insertintoreport(2,...)insertint