以下是我试图在其中定义外键关系的两个部分表。
public class Form
{
[Key, Column("FormID")]
public System.Guid FormGUID { get; set; }
[Column("PatGUID")]
public Nullable<System.Guid> PatientGUID { get; set; }
}
public class Patient
{
[Column("PatGUID")]
public System.Guid PatientGUID { get; set; }
[Key, Column("PatID")]
public int PatientID { get; set; }
对于这个例子,除了相关信息、字段、导航等,我已经删除了所有内容;希望不要太多。
我们有一个表 Form,FK 为 PatGUID 到具有字段 PatGUID 的 Patient 表。
Patient 表有一个 PatID int KEY 字段。
我们需要为我们的代码优先实体模型重命名我们的字段;此示例中需要更改的相关字段是 PatGUID 更改为 PatientGUID。
我遇到的困难是尝试使用注释或流利定义此外键。
所以我需要的最终结果是:
主键表:Patient,字段:PatGUID(重命名为PatientGUID)
外键表:表单,字段:PatGUID(重命名为PatientGUID)
这似乎不会造成大问题,但 Patient.PatGUID 的组合不是主键,PatGUID 字段被重命名为 PatientGUID 尚未启用 WCF 数据服务以正确创建具有正确引用的引用,因此正确选择/加入:
SELECT … FROM [dbo].[Form] AS [Extent1]
INNER JOIN [dbo].[Patient] AS [Extent2] ON [Extent1].[PatGUID] = [Extent2].[PatGUID]
最佳答案
EF 尚不支持委托(delegate)人的键不是主键而是具有唯一键约束的其他列的关系。是on the feature request list但既没有实现,也没有出现在下一个版本 (EF 6) 的路线图上。如果它完全实现(可能在 EF 7 中),预计需要等待一年或更长时间才能投入生产。
在您的特定模型中,EF 根本无法识别 Form 和 Patient 之间的任何关系,因为 Patient.PatientID 被标记为 [Key],而不是 Patient.PatientGUID,EF 将 Form.PatientGUID 视为普通标量属性,而不是 Patient< 的="">.
理论上,您可以将 Patient.PatientGUID 伪造为模型中的 [Key] 属性,但如果您不创建它,它就不是数据库中的主键来自数据库的模型或来自代码优先模型的数据库,也就是说,如果您手动在模型和(现有)数据库之间进行映射。但我不确定这是否会在其他任何地方引起微妙的问题。
如果要获取 Patients 和相关的 Forms,另一种方法是在 LINQ 中编写手动 join 语句。然后,您可以使用任意属性连接两个实体,而不仅仅是关键属性。在我看来,这是更简洁且不那么“棘手”的方法。但是,缺点是您在 Patient 和 Form 之间没有导航属性 - 引用或集合,并且您不能使用预加载 (在您的 LINQ 查询中包括),延迟加载或舒适的“点路径语法”(如 Form.Patient.SomePatientProperty 等)。
关于c# - 在主表中创建具有重命名字段和非主键的实体关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15352114/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#