gpt4 book ai didi

asp.net-mvc - 在 ASP.NET MVC 中使用外键保存实体

转载 作者:行者123 更新时间:2023-12-04 06:34:27 25 4
gpt4 key购买 nike

我需要一些帮助来做一些我认为很简单的事情。我将 ASP.net MVC 3 与 CodeFirst (CTP5) 一起使用

我有两个实体:公司和位置。一个公司可以有多个地点。类(class)如下(去除了所有不必要的信息)

public class Company
{
public int Id { get; set; }

[Required]
public string Name { get; set; }

public virtual ICollection<Location> Locations { get; set; }
}

public class Location
{
public int Id { get; set; }

[Required]
public string Name { get; set; }

[Required]
public virtual Company Company { get; set; }

}

现在在我的 Controller 中,我只允许在公司的上下文中创建一个位置,所以公司 ID 总是被传入(在 View 中,我在只读字段中显示公司的名称,但不允许用户更改/编辑。
    public ActionResult Create(int companyId)
{
Company company = _session.Single<Company>(c => c.Id == companyId);
Location newLocation = new Location {Company = company};
return View(newLocation);
}

[HttpPost]
public ActionResult Create(Location location)
{
if (ModelState.IsValid)
{
_session.Add<Location>(location);
_session.CommitChanges();
return RedirectToAction("Index");
} else {
return View(location);
}
}

现在,每当我尝试创建新位置时,ModelState.IsValid 始终为 false,因为 location.Company.Name 未提供并且是 Company 上的必填字段。我从不尝试在这里创建新公司,我只是尝试创建一个引用正确公司的位置。我不想将 Name 属性添加到 View 中只是为了让 ModelState 进行验证。如何轻松实现?我应该传递与 View 不同的东西吗?或 View ?

最佳答案

正如我在评论中解释的那样,我偶然发现了一个使这项工作起作用的小改动,但我仍然认为这是一个困惑,因为我不明白为什么我需要复制 child 的 Id 参数,但是我能找到的最好/最简单的应该将来很容易更新,我将第一个承认我不知道 CodeFirst 中的所有(或大部分)内容。

我改变了位置类:

public class Location  
{
public int Id { get; set; }

[Required]
public string Name { get; set; }

[Required]
public virtual Company Company { get; set; }
}

到:
public class Location  
{
public int Id { get; set; }

[Required]
public string Name { get; set; }

[Required]
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
}

现在据我所知,这根本没有改变数据库架构,但现在位置(验证时)唯一需要的是 CompanyId 字段中有一个 ID,公司属性可以留空(之前,由于需要 Company 类,因此它试图验证正确的 Company)。

因此,现在在创建位置时, View 需要在 CompanyId 中传递回的唯一内容。

有人看到任何缺点吗?或者更好的方法?

关于asp.net-mvc - 在 ASP.NET MVC 中使用外键保存实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4999383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com