我正在开发一个首先使用EF代码的角度/微风Web应用程序,并遇到一个奇怪的问题。以下是代码段:
public class Person
{
public int Id { get; set; }
public int? AddressId { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public virtual ICollection<Person> Persons { get; set; }
}
// DbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().HasOptional(x => x.Address).WithMany(x => x.Persons).WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
除了一种情况外,一切都运行良好:您可以在不指定地址的情况下创建人员,但是,一旦为该人选择了地址,您就可以更改为另一个人,但是您无法将其删除。
这是我在Angular select中删除它的方法:
<option value=""></option>
这是我在尝试重置地址时遇到的错误:
{"The UPDATE statement conflicted with the FOREIGN KEY constraint \"FK_dbo.Person_dbo.Address_AddressId\". The conflict occurred in database \"MyDb\", table \"dbo.Address\", column 'Id'.\r\nThe statement has been terminated."}
那么,出了什么问题?
更新: 正如我所知,问题似乎是在客户端。选择空选项时,它将AddressId设置为0,而不是NULL。如果我在调试模式下将其更改为NULL,它将起作用。这是完整的选择代码:
<select ng-model="person.address" ng-options="g.name for g in addressList"><option value=""></option></select>
现在,问题是如果选择空地址,如何将其id返回为NULL而不是0?
答案 0 :(得分:1)
你可以设置一个plunker吗?
在我看来,Person.addressId
应该在元数据中被标记为可为空(你可以确认吗?)因此Breeze应该将addressId
设置为null
(而不是0
当你使Person.address
为空时。
我感觉这可能是涉及您的组合框绑定选项<option value=""></option>
的Angular问题。我不确定在与ng-options="g.name for g in addressList"
结合使用时,您的行为是否正常。
您可以考虑放置一个&#34;按钮&#34; (&#39; x&#39; for&#34; clear&#34;)在组合框旁边,点击后设置Person.address = null
或Person.addressId = null
。