EF Code First .SaveChanges Обновление неверной таблицы - PullRequest
2 голосов
/ 14 марта 2011

У меня объявлена ​​следующая таблица

namespace RLSBCWebSite.Domain.Entities
{

    [Table( Name = "tblFixtures" )]
    [DisplayColumn( "Date", "Date", false )]
    public class Fixture
    {
        [HiddenInput( DisplayValue = false )]
        [Column( IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert )]
        public int FixtureID { get; set; }

        [Required( ErrorMessage = "Please select Male, Female or Mixed" )]
        public string Gender { get; set; }

    ...... more columns

        public IEnumerable<ValidationResult> Validate( ValidationContext validationContext )
        {
            if (((ScoreFor > 0) || (ScoreAgainst > 0)) && (!String.IsNullOrEmpty( Comments )))
                yield return new ValidationResult( "Please complete either ScoreFor & ScoreAgainst or Comments!", new[] { "Comments" } );
        }
    }
}

Мой DbContext выглядит следующим образом:

namespace RLSBCWebSite.Domain.Entities
{

    public class RLSBCWebSiteDb : DbContext

    {

        public DbSet<Officer> tblOfficers { get; set; }

        public DbSet<Fixture> tblFixtures { get; set; }

        public DbSet<CompetitionWinner> tblCompetitionWinners { get; set; }

    }
}

Мой Web.Config имеет:

    <connectionStrings>
    <add name="RLSBCWebSiteDb"
        connectionString="data source=MAINPC\SQLEXPRESS;Initial Catalog=RLSBCWebSite;Integrated Security=True"
        providerName="System.Data.SqlClient" />
</connectionStrings>

Мой код контроллера:

        RLSBCWebSiteDb rlsbcWebSite = new RLSBCWebSiteDb();

    [HttpPost]
    public ActionResult CreateFixture(Fixture fixture)
    {
        if (ModelState.IsValid)
        {
            rlsbcWebSite.tblFixtures.Add( fixture );
            rlsbcWebSite.SaveChanges();

            return RedirectToAction( "MensResults", new { id = fixture.MatchDate.Year.ToString() } );
        }

        return View( fixture );
    }

Когда я пытаюсь сохранить запись, я получаю исключение SQL UpdateException со следующим сообщением об ошибке при выполнении оператора .SaveChanges ().

Неверное имя объекта 'dbo.Fixtures'.

Почему он пытается обновить таблицу с именем Fixtures? Конечно, это должно быть обновление tblFixtures.

1 Ответ

1 голос
/ 14 марта 2011

Я думаю, что [Table( Name = "tblFixtures" )] недопустимо, потому что Name не является свойством класса TableAttribute - что выглядит следующим образом:

public class TableAttribute : Attribute
{
    public TableAttribute(string tableName);

    public string SchemaName { get; set; }
    public string TableName { get; }
}

Итак, следующие настройки атрибутов должны работать как:

[Table("tblFixtures")]

или

[Table(TableName = "tblFixtures")]

Редактировать : Но мне интересно, почему вы не получили ошибку компилятора?

Я только что заметил, что в пространстве имен System.Data.Linq.Mapping (в сборке System.Data.Linq.dll) есть еще один класс TableAttribute, который на самом деле имеет свойство Name. Возможно, вы неправильно используете пространство имен. Вам нужен класс TableAttribute из пространства имен System.ComponentModel.DataAnnotations (в сборке EntityFramework.dll).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...