Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
c# entity framework
#81
[SRC="csharp"]using (var context = new YourDbContext())
{
var server = context.Servers.Find(1); // или FindOrDefault с последующей проверкой на null

Response(new YourPacket(server));
}
[/SRC]
Ответ
#82
Код:
MyDbContext Db = new MyDbContext();
var server = Db.Set<Server>.Where(x => predicate).Select(x => ....)

или

var server = Db.Set<Server>.FirstOrDefault( x => predicate)
Ответ
#83
При попытке брать ид предметов из инвентаря выдает ошибку
ну точнее в инвентарь вызывается предмет из таблицы предметов
Код:
[Error] Unknown column 'c.characterBELTid' in 'field list'
   at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet resultSet) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 92
   at MySql.Data.MySqlClient.MySqlDataReader.<ReadFirstResultSetAsync>d__65.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 297
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MySql.Data.MySqlClient.MySqlDataReader.<CreateAsync>d__64.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 287
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MySqlConnector.Core.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Core\TextCommandExecutor.cs:line 70
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlCommand.cs:line 172
   at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.<ExecuteAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext(Boolean buffer)
   at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
   at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Boolean& found)
   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
   at lambda_method(Closure , QueryContext )
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass17_1`1.<CompileQueryCore>b__0(QueryContext qc)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.First[TSource](IQueryable`1 source, Expression`1 predicate)
   at Project_Sky.PBCoreRE.Database.CharacterDB.loadCharacter(Int32 player_id) in E:\Project\Project_Sky\Project_Sky\Project_Sky.PBCoreRE\Database\CharacterDB.cs:line 13
   at Project_Sky.PBLogin.Emu.Network.Recv.PROTOCOL_LOGIN_REQ.RunImpl() in E:\Project\Project_Sky\Project_Sky\Project_Sky.PBLogin\Emu\Network\Recv\PROTOCOL_LOGIN_REQ.cs:line 38
   at Project_Sky.PBCoreRE.Packet.ClientPacket.Init(Byte[] buffer) in E:\Project\Project_Sky\Project_Sky\Project_Sky.PBCoreRE\Packet\ClientPacket.cs:line 29
   at Project_Sky.PBLogin.Emu.Network.ClientConnection.BeginRead(IAsyncResult asyncResult) in E:\Project\Project_Sky\Project_Sky\Project_Sky.PBLogin\Emu\Network\ClientConnection.cs:line 71
[SRC=Csharp]
public partial class CharacterModel
{
public int id { get; set; }
public int player_id { get; set; }
public string characterName { get; set; }
public int characterSlot { get; set; }
public int selectedCharacter { get; set; }
public int creationDate { get; set; }
public int playTime { get; set; }
public InventoryModel characterPRIMARY { get; set; }
public InventoryModel characterSECONDARY { get; set; }
public InventoryModel characterMELEE { get; set; }
public InventoryModel characterTHROWING { get; set; }
public InventoryModel characterSPECIAL { get; set; }
public InventoryModel characterID { get; set; }
public InventoryModel characterHEAD { get; set; }
public InventoryModel characterFACE { get; set; }
public InventoryModel characterJACKET { get; set; }
public InventoryModel characterPOKET { get; set; }
public InventoryModel characterGLOVE { get; set; }
public InventoryModel characterBELT { get; set; }
public InventoryModel characterHOLSTER { get; set; }
public InventoryModel characterSKIN { get; set; }
public InventoryModel characterBERET { get; set; }
public int skill { get; set; }
public int skill_level_1 { get; set; }
public int skill_level_2 { get; set; }
public int skill_level_3 { get; set; }
public int skill_slot_1 { get; set; }
public int skill_slot_2 { get; set; }
public int skill_slot_3 { get; set; }
public PlayerModel Player { get; set; }
}
[/SRC]
Ответ
#84
Пытается получить InventoryModel. Соответственно ищет ключ для связи.

Да и реализация сущности мягко говоря не очень.
Ответ
#85
PROGRAMMATOR Написал:Пытается получить InventoryModel. Соответственно ищет ключ для связи.

Да и реализация сущности мягко говоря не очень.

и как ему получить?
почему не очень?
Ответ
#86
Предметы - собственность аккаунта, один и тот же предмет может быть экипирован у нескольких персонажей. Так что Many-to-Many как раз то, что нужно. Связываешь персонажей и предметы через таблицу character_item, в случае с EF Core 2.0 придётся создать связующую сущность:

[SRC="csharp"]class CharacterItem
{
public int CharacterId { get; set; }
public Character Character { get; set; }

public int ItemObjId { get; set; }
public Item Item { get; set; }
}
[/SRC]


[SRC="csharp"]class Character
{
public ICollection<CharacterItem> CharacterItems { get; set; }
= new HashSet<CharacterItem>();
}
[/SRC]


И это, ты пишешь на C#, а выглядит это всё не как C#. kappa

Если для тебя принципиально важно, чтобы колонки таблиц были в snake_case, то незачем в самих сущностях применять такое написание. Проще в контексте задать необходимый стиль.

[SRC="csharp"]protected override void OnModelCreating(ModelBuilder builder)
{
builder.Model.GetEntityTypes()
.SelectMany(entity => entity.GetProperties())
.ToList()
.ForEach(prop => prop.Relational().ColumnName = prop.Name.ToSnakeCase());
}
[/SRC]


[SRC="csharp"]public static string ToSnakeCase(this string value)
{
return Regex.Replace(value,
"(.)(?=[A-Z])",
"$1_",
RegexOptions.Compiled
).ToLower();
}
[/SRC]
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Опыт работы с языком Lua, Love framework dj--alex 0 2,371 09-30-2019, 10:37 AM
Последний пост: dj--alex

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)