2012-03-28 2 views
0

мой код, как показано нижеEntity Framework 4.3.1, как создавать союзы

public class User 
{ 
    public int ID { get; set; } 
    public int BillingAddressID { get; set; } 
    public Address BillingAddress { get; set; } 
    public IList<Shipment> Shipments { get; set; } 
} 

public class Address 
{ 
    public int ID { get; set; } 
    public string Street { get; set; } 
    public string City { get; set; } 
    public string ZipCode { get; set; } 
} 

public class Shipment 
{ 
    public int ID { get; set; } 
    public string State { get; set; } 
    public int DeliveryAddressID { get; set; } 
    public Address DeliveryAddress { get; set; } 
    public User ShipUser { get; set; } 
    //[ForeignKey("ShipUser")] 
    public int ShipUserID { get; set; } 
    //public int UserId { get; set; } 
} 

public class TestContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Address> Addresses { get; set; } 
    public DbSet<Shipment> Shipments { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Shipment>().HasRequired(u => u.ShipUser) 
      .WithMany(d => d.Shipments) 
      .HasForeignKey(c => c.ShipUserID) 
      .WillCascadeOnDelete(false); 
    } 
} 
  1. если я удалить метод переопределения, то я получаю сообщение об ошибке «SqlException: введение ограничения внешнего ключа„FK_Shipments_Users_ShipUserID“на таблица «Отгрузки» может вызывать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. Не удалось создать ограничение. См. предыдущие ошибки. "
  2. Если я удалю ShipUserID в классе отгрузки, он будет работать нормально, когда я увижу таблицу, созданную ef, я нашел столбец с именем Shipment_UserID в таблице Shipment.I не знаю почему.
  3. Если вы переименуете ключ класса «ключ» в UserID, он также работает нормально.

В любом случае, я стараюсь, но я не знаю причины, мне нужны некоторые книги об ассоциациях EF.

ответ

0
  1. Если вы не имеете отображения указанного без cascadeDelete = ложного для одного отношения она будет создавать несколько путей каскадных, если у вас есть буксирные отношения к user от Shipment. По соглашению вы можете использовать общественный

    Public User ShipUser { get; set; }
    public int ShipUserID { get; set; }

он будет использовать ShipUserID в качестве внешнего ключа по соглашению.

  1. Если вы удалите ShipUserID Ef, необходимо создать свой собственный внешний ключ, чтобы сохранить отношения. это ваш «Shipment_UserID»

  2. rename the class indenty key to UserID Я не понимаю, что вы имели в виду.

Here is a good tutorial начать с

Смежные вопросы