Asp.net mvc 3 使用延迟加载的MVC3中的EF 4.1

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

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 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);