Asp.net mvc 3 使用延迟加载的MVC3中的EF 4.1
MVC3中的EF 4.1和延迟加载,使用代码优先模型 我正在使用会员API创建帐户。成功创建帐户后。我重定向以自动创建联系人记录。 contactId(自动生成数据库)、userid(存储成员api生成的用户id) 这些模型是:Asp.net mvc 3 使用延迟加载的MVC3中的EF 4.1,asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,MVC3中的EF 4.1和延迟加载,使用代码优先模型 我正在使用会员API创建帐户。成功创建帐户后。我重定向以自动创建联系人记录。 contactId(自动生成数据库)、userid(存储成员api生成的用户id) 这些模型是: public class Contact { public int ContactID { set; get; } public string UserId { set; get; } public string LastName { set; get
public class Contact
{
public int ContactID { set; get; }
public string UserId { set; get; }
public string LastName { set; get; }
public int? CompanyID { set; get; } // not sure if I need this as it will be NULL
public virtual Company CompanyInfo { set; get; }
}
接下来,用户可以单击创建公司链接或注销&稍后登录以创建公司记录
public class Company
{
public int CompanyID { set; get; }
public int ContactID { set; get; }
public string CompanyName { set; get; }
public virtual Contact Contacts { set; get; }
}
当用户决定创建公司记录时,我检查公司是否已经存在,如果存在,我只是显示联系信息和公司信息,如果没有找到,我重定向到创建公司
public ActionResult chckifCompanyFound()
{
int contactId = 1; //Assuming I retrieved the value
//I think I should get the data from Company table, if company data found then contact data could be retrieved using lazy loading?
Company c= db.Company.Include(c => c.Contacts).Where(x => x.ContactID == contactId).FirstOrDefault();
if(c == null)
//redirect to create company
else
// view data from c company object
}
当前,在会员API创建帐户后,它尝试创建联系人记录时显示异常。我创建的记录如下所示:
触点=新触点()
contact.UserId=UserId
contact.LastName=LastName
db.Contacts.Add(contact)
db.SaveChanges()
例外情况:
无法确定类型“D.Models.Contact”和“D.Models.Company”之间关联的主端。必须使用关系fluent API或数据注释显式配置此关联的主体端 非常感谢你 试试看:
Contact cc = db.Contacts.Include(c=>c.CompanyInfo).Where(x => x.ContactID == product.ContactID).FirstOrDefault();
尝试:
请(从)尝试以下操作:
请(从)尝试以下操作:
尝试将您的型号替换为以下型号:
public class Contact
{
public int ContactId { set; get; }
public string UserId { set; get; }
public int CompanyId { get; set; }
public string LastName { set; get; }
public virtual Company Company { set; get; }
}
public class Company
{
public int CompanyId { set; get; }
public string CompanyName { set; get; }
public virtual ICollection<Contact> Contacts { set; get; }
}
尝试将您的型号替换为以下型号:
public class Contact
{
public int ContactId { set; get; }
public string UserId { set; get; }
public int CompanyId { get; set; }
public string LastName { set; get; }
public virtual Company Company { set; get; }
}
public class Company
{
public int CompanyId { set; get; }
public string CompanyName { set; get; }
public virtual ICollection<Contact> Contacts { set; get; }
}
它突出显示(c=>c.CompanyInfo)并显示错误:错误1无法将lambda表达式转换为类型“string”,因为它不是委托类型确保您使用的是system.data.Entity对象仍然显示为null,但编译错误已消失。你知道如何把这两个查询放在一起吗,也许到时候它会起作用。t尝试通过另一个查询单独获取联系人,并在您单独获取时查看其是否具有属性,如果没有,您的模型/db/dataIt有问题,它会突出显示(c=>c.CompanyInfo)并显示错误:错误1无法将lambda表达式转换为类型“string”,因为它不是委托类型确保您使用的是system.data.Entity对象仍显示为null,但编译错误已消失。你知道如何把这两个查询放在一起吗,也许到时候它会起作用。t尝试通过另一个查询单独获取联系人,并在您单独获取时查看其是否具有属性,如果没有,您的模型/db/data有问题您是先使用纯代码还是围绕现有数据库建模?而且,你的模特对我来说也没什么意义。。公司如何拥有
联系人
和联系人ID
以及联系人如何拥有公司
但没有公司ID
我首先使用代码。对于模型,一个公司可以有多个联系人,并且联系人可以是一个公司的一部分。您认为我需要在联系人模型中添加companyId吗?如果需要,为什么?我想我可以使用延迟加载通过联系人模型获取公司信息。如果您能帮助我修复模型,我将不胜感激。您是先使用纯代码还是围绕现有数据库进行建模?而且,你的模特对我来说也没什么意义。。公司如何拥有联系人
和联系人ID
以及联系人如何拥有公司
但没有公司ID
我首先使用代码。对于模型,一个公司可以有多个联系人,并且联系人可以是一个公司的一部分。您认为我需要在联系人模型中添加companyId吗?如果需要,为什么?我想我可以使用延迟加载通过联系人模型获取公司信息。谢谢你能帮我修理我的模型。嗨,舒尼尔,我修改了我原来的问题,抱歉弄糊涂了。请你看一下,并帮助我修改正确的模型,因为我被卡住了,运行代码时出现异常。我提到一家公司可以有多个联系人,请忽略它。一家公司只能有一个联系人和一个联系人。非常感谢嗨,舒尼尔,我修改了我原来的问题,抱歉搞混了。请你看一下,并帮助我修改正确的模型,因为我被卡住了,运行代码时出现异常。我提到一家公司可以有多个联系人,请忽略它。一家公司只能有一个联系人和一个联系人。非常感谢
var company = dbContext.Contacts.Find(userId).Company;
Console.WriteLine("Company Name: {0}", company.CompanyName);