我是ADO.NET的新手。我对所有基本的INSERT等都没问题。但是现在,我在将记录插入包含外键的表时遇到问题。我做了一些研究,但仍然卡住......所以这里有:
我想将一条新记录插入名为Professionals的表中。它有一个映射到不同表的外键。 FK是WAPublicUserID。
见图片:
当我创建数据模型时,WAPublicUserID未列在Professional数据模型的Properties中。
见图片:
因此,当我尝试在我的代码中创建INSERT时,无法找到WAPublicUserID字段,我无法插入记录。我希望使用的WAPublicUserID已经存在于FK映射到的WAPublicUser表中。
见图片:
如何在Professionals表中插入包含WAPublicUser表中现有记录的外键的新记录?谢谢!
答案 0 :(得分:1)
有人将“在模型中包含外键属性”设置为false。
因此,您拥有WAPublicUser的导航属性,但不具有ForeignKey属性。
这意味着您必须将相关的WAPublicUser对象附加到您要保存的对象上的WAPublicUser属性。
我需要更多代码来确切知道你在做什么,但其基础知识如下:
如果WAPublicUser已经存在:
从数据库中抓取现有实体 - OldEntity。
使用您当前尝试保存的新属性更新OldEntity。
将(现在更新的)Old实体保存回数据库 - 因为您刚刚读过它,它应该已经设置了WAPublicUser引用。
如果没有:
创建新的WAPublicUser
将Professional对象的WAPublicuser属性设置为新创建的WAPublicUser - 该行位于代码停在上面的位置。
myEnt.AddToProfessionals(原);
答案 1 :(得分:0)
知道了。这是它的工作原理,以防其他人读到这个。 #1和#2是焦点。
Mucho感谢@BonyT让我走上了正确的道路......
using (JONDOEntities myEnt = new JONDOEntities())
{
// #1) Need to create WAPublicUser object first
var wap = (from w in myEnt.WAPublicUsers
where w.WAPublicUserID == 981
select w).FirstOrDefault();
var proUser = (from p in myEnt.Professionals
where p.WAPublicUser.WAPublicUserID == wap.WAPublicUserID
select p).FirstOrDefault();
// If the record does not exist in the Professional table, insert new record.
if (proUser == null)
{
JONDOModel.Professional pro = new JONDOModel.Professional()
{
ProfessionalType = "unknown",
FirstName = "unknown",
LastName = "unknown",
PhoneNumber = "unknown",
WebsiteUrl = "unknown",
TaxID = "unknown",
BusinessInfo = "unknown",
ProfessionalLogo = "unknown",
IsApproved = true,
CATaxExempt = false,
WAPublicUser = wap // #2) Plug in the WAPublicUser object here
};
myEnt.AddToProfessionals(pro);
myEnt.SaveChanges();
}
答案 2 :(得分:0)
好的,这是我OP的真正答案:
我接手管理的asp.net网站是针对.NET 3.5的。显然,3.5和实体框架存在一些问题。
我将网站转换为目标.NET 4.0(*见下文看看如何)。当我去创建实体数据模型时,默认情况下,它现在包含外键,因此,我没有OP中描述的任何问题。
如果遇到这种情况,您必须确保Web服务器也升级到.NET 4.0。因为如果您将网站文件升级/转换为目标.NET 4.0,但您的Web服务器尚未升级,那么尽管该网站在您的开发机器上运行顺畅(假设它具有.NET 4.0框架),它将崩溃实时Web服务器。
另外,.NET 4.0框架将运行使用以前版本的.NET(向后兼容性)构建的应用程序......但是,面向.NET 4.0的应用程序将无法在具有.NET 3.5框架的环境中运行或之前。
将网站转换为.NET 4.0:
将网站转换/升级到.NET 4.0的两种方法。 1)通常,当您打开一个新的副本并且它的目标是4.0时,visual studio会询问您是否要转换/升级(选择是)。 2)在visual studio(商业版)中,单击WEBSITE选项卡,START OPTIONS,BUILD ...然后你应该看到更改“Target Framework”的选项......