【发布时间】:2017-12-20 12:57:33
【问题描述】:
这是我的一个数据库,根据代码优先原则创建: 我有一个抽象类Client(在我的数据库中创建了这个类的一个表):
public abstract class Client
{
public int ClientId { get; set; }
[Required(ErrorMessage = "Name is required for Client")]
public string ClientName { get; set; } // name
[Required(ErrorMessage = "Phone number is required for Client")]
public string ClientPhoneNumber { get; set; } // phone number
public string Email { get; set; } // email
public string Comment { get; set; } // note
[Required(ErrorMessage = "Client should be enabled or disabled")]
public bool IsDisabled { get; set; }
}
三个类继承自它:
1)
public class PrivatePerson : Client // дядя Вася
{
public string PrivatePersonSurname { get; set; }
}
2)
public class Firm : Client
{
[Required(ErrorMessage = "Ownership is required for Firm")]
public virtual Ownership Ownership { get; set; }
[Required(ErrorMessage = "Client address is required for Firm")]
public virtual ClientAddress FirmAddress { get; set; }
}
3)
public class AdvertisingAgency : Client
{
[Required(ErrorMessage = "Ownership is required for Advertising agency")]
public virtual Ownership Ownership { get; set; }
[Required(ErrorMessage = "Client address is required for Advertising agency")]
public virtual ClientAddress AdvertisingAgencyAddress { get; set; }
}
!! Firm 和 AdvertisingAgency 的领域相似
这里是 ClientAddress 类:
public class ClientAddress
{
public int ClientAddressId { get; set; }
[Required(ErrorMessage = "Postal code is required for Client Address")]
public int PostalCode { get; set; }
[Required(ErrorMessage = "City is required for Client Address")]
public virtual City ClientCity { get; set; }
public int POBox { get; set; }
public virtual Street ClientStreet { get; set; }
public string StreetNumber { get; set; }
public int Appartment { get; set; }
public string ClientAddressComment { get; set; }
}
上下文:
public virtual DbSet<Client> Clients { get; set; }
public virtual DbSet<ClientAddress> ClientAddresses { get; set; }
好吧,当我尝试创建数据库时,我得到了这个异常:
System.Data.SqlClient.SqlException H结果=0x80131904 消息=在表 'Clients' 上引入 FOREIGN KEY 约束 'FK_dbo.Clients_dbo.ClientAddresses_FirmAddress_ClientAddressId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 无法创建约束或索引。查看以前的错误。
谁能指出我的错误? 谢谢
这是我的上下文(部分):
public class FivePlusDBContext : DbContext
{
public FivePlusDBContext() : base("name = FivePlus")
{
}
public virtual DbSet<City> Cities { get; set; }
public virtual DbSet<Street> Streets { get; set; }
public virtual DbSet<Client> Clients { get; set; }
public virtual DbSet<ClientAddress> ClientAddresses { get; set; }
public virtual DbSet<Ownership> Ownerships { get; set; }
}
要创建记录,我执行以下操作:
using (var ctx = new FivePlusDBContext())
{
City C_1 = new City() { CityName = "Name" };
ctx.Cities.Add(C_1);
ctx.SaveChanges();
}
【问题讨论】:
-
你也愿意分享 Fluent Api 代码吗?
-
onModelCreating方法在 yoru 上下文中看起来如何?您可以尝试以下方法:protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Client>() .HasOne(c => c.ClientAddress) .WithOptional(a => a.Client) .WillCascadeOnDelete(false); } -
编辑了我的问题以帮助您了解我如何创建数据库。当我尝试创建任何记录时,我得到一个异常
-
我没有使用 DbModelBuilder
-
不,每个单位(公司或广告代理)都有唯一的地址。
标签: c# entity-framework